@taserjs/router 0.1.3 → 0.1.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.
- package/README.md +0 -7
- package/dist/cjs/builder/constants.cjs +0 -6
- package/dist/cjs/builder/constants.cjs.map +1 -1
- package/dist/cjs/builder/constants.d.cts +0 -5
- package/dist/cjs/builder/factories.cjs.map +1 -1
- package/dist/cjs/builder/factories.d.cts +9 -9
- package/dist/cjs/builder/middleware-unit.cjs +64 -0
- package/dist/cjs/builder/middleware-unit.cjs.map +1 -0
- package/dist/cjs/builder/middleware-unit.d.cts +1 -0
- package/dist/cjs/builder/middleware.cjs +3 -1
- package/dist/cjs/builder/middleware.cjs.map +1 -1
- package/dist/cjs/builder/route.cjs +7 -21
- package/dist/cjs/builder/route.cjs.map +1 -1
- package/dist/cjs/builder/router.cjs +1 -20
- package/dist/cjs/builder/router.cjs.map +1 -1
- package/dist/cjs/builder/router.d.cts +6 -27
- package/dist/cjs/builder/standalone.cjs +43 -0
- package/dist/cjs/builder/standalone.cjs.map +1 -0
- package/dist/cjs/builder/standalone.d.cts +28 -0
- package/dist/cjs/define/middleware.cjs +11 -16
- package/dist/cjs/define/middleware.cjs.map +1 -1
- package/dist/cjs/define/middleware.d.cts +44 -34
- package/dist/cjs/index.cjs +15 -4
- package/dist/cjs/index.d.cts +6 -4
- package/dist/cjs/middleware/body-limit.cjs +3 -3
- package/dist/cjs/middleware/body-limit.cjs.map +1 -1
- package/dist/cjs/middleware/body-limit.d.cts +1 -1
- package/dist/cjs/middleware/compress.cjs +3 -3
- package/dist/cjs/middleware/compress.cjs.map +1 -1
- package/dist/cjs/middleware/compress.d.cts +1 -1
- package/dist/cjs/middleware/cors.cjs +3 -3
- package/dist/cjs/middleware/cors.cjs.map +1 -1
- package/dist/cjs/middleware/cors.d.cts +1 -1
- package/dist/cjs/middleware/csrf.cjs +3 -3
- package/dist/cjs/middleware/csrf.cjs.map +1 -1
- package/dist/cjs/middleware/csrf.d.cts +1 -1
- package/dist/cjs/middleware/etag.cjs +3 -3
- package/dist/cjs/middleware/etag.cjs.map +1 -1
- package/dist/cjs/middleware/etag.d.cts +1 -1
- package/dist/cjs/middleware/hono-mw.cjs +23 -0
- package/dist/cjs/middleware/hono-mw.cjs.map +1 -0
- package/dist/cjs/middleware/hono-mw.d.cts +16 -0
- package/dist/cjs/middleware/jwk.cjs +6 -2
- package/dist/cjs/middleware/jwk.cjs.map +1 -1
- package/dist/cjs/middleware/jwt.cjs +6 -2
- package/dist/cjs/middleware/jwt.cjs.map +1 -1
- package/dist/cjs/middleware/secure-headers.cjs +3 -3
- package/dist/cjs/middleware/secure-headers.cjs.map +1 -1
- package/dist/cjs/middleware/secure-headers.d.cts +1 -1
- package/dist/cjs/middleware/timing.cjs +3 -3
- package/dist/cjs/middleware/timing.cjs.map +1 -1
- package/dist/cjs/middleware/timing.d.cts +1 -1
- package/dist/cjs/types/index.d.cts +20 -52
- package/dist/cjs/types/type-utils.d.cts +2 -2
- package/dist/cjs/types/units.d.cts +18 -45
- package/dist/esm/builder/constants.d.ts +0 -5
- package/dist/esm/builder/constants.js +1 -6
- package/dist/esm/builder/constants.js.map +1 -1
- package/dist/esm/builder/factories.d.ts +9 -9
- package/dist/esm/builder/factories.js.map +1 -1
- package/dist/esm/builder/middleware-unit.d.ts +1 -0
- package/dist/esm/builder/middleware-unit.js +64 -0
- package/dist/esm/builder/middleware-unit.js.map +1 -0
- package/dist/esm/builder/middleware.js +3 -1
- package/dist/esm/builder/middleware.js.map +1 -1
- package/dist/esm/builder/route.js +7 -21
- package/dist/esm/builder/route.js.map +1 -1
- package/dist/esm/builder/router.d.ts +6 -27
- package/dist/esm/builder/router.js +1 -20
- package/dist/esm/builder/router.js.map +1 -1
- package/dist/esm/builder/standalone.d.ts +28 -0
- package/dist/esm/builder/standalone.js +32 -0
- package/dist/esm/builder/standalone.js.map +1 -0
- package/dist/esm/define/middleware.d.ts +44 -34
- package/dist/esm/define/middleware.js +11 -16
- package/dist/esm/define/middleware.js.map +1 -1
- package/dist/esm/index.d.ts +6 -4
- package/dist/esm/index.js +3 -3
- package/dist/esm/middleware/body-limit.d.ts +1 -1
- package/dist/esm/middleware/body-limit.js +3 -3
- package/dist/esm/middleware/body-limit.js.map +1 -1
- package/dist/esm/middleware/compress.d.ts +1 -1
- package/dist/esm/middleware/compress.js +3 -3
- package/dist/esm/middleware/compress.js.map +1 -1
- package/dist/esm/middleware/cors.d.ts +1 -1
- package/dist/esm/middleware/cors.js +3 -3
- package/dist/esm/middleware/cors.js.map +1 -1
- package/dist/esm/middleware/csrf.d.ts +1 -1
- package/dist/esm/middleware/csrf.js +3 -3
- package/dist/esm/middleware/csrf.js.map +1 -1
- package/dist/esm/middleware/etag.d.ts +1 -1
- package/dist/esm/middleware/etag.js +3 -3
- package/dist/esm/middleware/etag.js.map +1 -1
- package/dist/esm/middleware/hono-mw.d.ts +16 -0
- package/dist/esm/middleware/hono-mw.js +23 -0
- package/dist/esm/middleware/hono-mw.js.map +1 -0
- package/dist/esm/middleware/jwk.js +7 -3
- package/dist/esm/middleware/jwk.js.map +1 -1
- package/dist/esm/middleware/jwt.js +7 -3
- package/dist/esm/middleware/jwt.js.map +1 -1
- package/dist/esm/middleware/secure-headers.d.ts +1 -1
- package/dist/esm/middleware/secure-headers.js +3 -3
- package/dist/esm/middleware/secure-headers.js.map +1 -1
- package/dist/esm/middleware/timing.d.ts +1 -1
- package/dist/esm/middleware/timing.js +3 -3
- package/dist/esm/middleware/timing.js.map +1 -1
- package/dist/esm/types/index.d.ts +20 -52
- package/dist/esm/types/type-utils.d.ts +2 -2
- package/dist/esm/types/units.d.ts +18 -45
- package/package.json +3 -3
- package/src/builder/constants.ts +0 -6
- package/src/builder/factories.ts +2 -2
- package/src/builder/middleware-unit.ts +66 -0
- package/src/builder/middleware.ts +8 -2
- package/src/builder/route.ts +10 -34
- package/src/builder/router.ts +7 -77
- package/src/builder/standalone.ts +70 -0
- package/src/define/middleware.ts +155 -231
- package/src/index.ts +29 -3
- package/src/middleware/body-limit.ts +3 -4
- package/src/middleware/compress.ts +3 -4
- package/src/middleware/cors.ts +3 -4
- package/src/middleware/csrf.ts +3 -4
- package/src/middleware/etag.ts +3 -4
- package/src/middleware/hono-mw.ts +22 -0
- package/src/middleware/jwk.ts +10 -8
- package/src/middleware/jwt.ts +9 -7
- package/src/middleware/secure-headers.ts +3 -4
- package/src/middleware/timing.ts +3 -4
- package/src/types/index.ts +54 -196
- package/src/types/type-utils.ts +8 -4
- package/src/types/units.ts +153 -87
- package/dist/cjs/define/handler.cjs +0 -38
- package/dist/cjs/define/handler.cjs.map +0 -1
- package/dist/cjs/define/handler.d.cts +0 -13
- package/dist/cjs/middleware/wrap-hono.cjs +0 -19
- package/dist/cjs/middleware/wrap-hono.cjs.map +0 -1
- package/dist/cjs/middleware/wrap-hono.d.cts +0 -7
- package/dist/cjs/register.d.cts +0 -2
- package/dist/cjs/types/units.cjs +0 -8
- package/dist/cjs/types/units.cjs.map +0 -1
- package/dist/esm/define/handler.d.ts +0 -13
- package/dist/esm/define/handler.js +0 -38
- package/dist/esm/define/handler.js.map +0 -1
- package/dist/esm/middleware/wrap-hono.d.ts +0 -7
- package/dist/esm/middleware/wrap-hono.js +0 -18
- package/dist/esm/middleware/wrap-hono.js.map +0 -1
- package/dist/esm/register.d.ts +0 -2
- package/dist/esm/types/units.js +0 -8
- package/dist/esm/types/units.js.map +0 -1
- package/src/define/handler.ts +0 -62
- package/src/middleware/wrap-hono.ts +0 -25
- package/src/register.ts +0 -1
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { bodyLimit as honoBodyLimit } from "hono/body-limit";
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
const wrapped = wrapHonoMiddleware(honoBodyLimit);
|
|
3
|
+
import { middleware } from "../define/middleware.js";
|
|
4
|
+
import { honoMw } from "./hono-mw.js";
|
|
6
5
|
|
|
7
6
|
export function bodyLimit(...args: Parameters<typeof honoBodyLimit>) {
|
|
8
|
-
return
|
|
7
|
+
return middleware(honoMw(honoBodyLimit(...args)));
|
|
9
8
|
}
|
|
10
9
|
|
|
11
10
|
export type BodyLimitOptions = Parameters<typeof honoBodyLimit>[0];
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { compress as honoCompress } from "hono/compress";
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
const wrapped = wrapHonoMiddleware(honoCompress);
|
|
3
|
+
import { middleware } from "../define/middleware.js";
|
|
4
|
+
import { honoMw } from "./hono-mw.js";
|
|
6
5
|
|
|
7
6
|
export function compress(...args: Parameters<typeof honoCompress>) {
|
|
8
|
-
return
|
|
7
|
+
return middleware(honoMw(honoCompress(...args)));
|
|
9
8
|
}
|
|
10
9
|
|
|
11
10
|
export type CompressOptions = NonNullable<Parameters<typeof honoCompress>[0]>;
|
package/src/middleware/cors.ts
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { cors as honoCors } from "hono/cors";
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
const wrapped = wrapHonoMiddleware(honoCors);
|
|
3
|
+
import { middleware } from "../define/middleware.js";
|
|
4
|
+
import { honoMw } from "./hono-mw.js";
|
|
6
5
|
|
|
7
6
|
export function cors(...args: Parameters<typeof honoCors>) {
|
|
8
|
-
return
|
|
7
|
+
return middleware(honoMw(honoCors(...args)));
|
|
9
8
|
}
|
|
10
9
|
|
|
11
10
|
export type CorsOptions = NonNullable<Parameters<typeof honoCors>[0]>;
|
package/src/middleware/csrf.ts
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { csrf as honoCsrf } from "hono/csrf";
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
const wrapped = wrapHonoMiddleware(honoCsrf);
|
|
3
|
+
import { middleware } from "../define/middleware.js";
|
|
4
|
+
import { honoMw } from "./hono-mw.js";
|
|
6
5
|
|
|
7
6
|
export function csrf(...args: Parameters<typeof honoCsrf>) {
|
|
8
|
-
return
|
|
7
|
+
return middleware(honoMw(honoCsrf(...args)));
|
|
9
8
|
}
|
|
10
9
|
|
|
11
10
|
export type CsrfOptions = NonNullable<Parameters<typeof honoCsrf>[0]>;
|
package/src/middleware/etag.ts
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { etag as honoEtag } from "hono/etag";
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
const wrapped = wrapHonoMiddleware(honoEtag);
|
|
3
|
+
import { middleware } from "../define/middleware.js";
|
|
4
|
+
import { honoMw } from "./hono-mw.js";
|
|
6
5
|
|
|
7
6
|
export function etag(...args: Parameters<typeof honoEtag>) {
|
|
8
|
-
return
|
|
7
|
+
return middleware(honoMw(honoEtag(...args)));
|
|
9
8
|
}
|
|
10
9
|
|
|
11
10
|
export type EtagOptions = NonNullable<Parameters<typeof honoEtag>[0]>;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { createTaserCompatHandler } from "@taserjs/router-core";
|
|
2
|
+
import type { MiddlewareHandler } from "hono";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Adapts a standard Web / Hono-compatible middleware function `(c, next) => ...`
|
|
6
|
+
* into a Taser-compatible middleware handler function `(ctx, next) => Promise<Response>`.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* import { honoMw } from "@taserjs/router";
|
|
11
|
+
* import { cors } from "hono/cors";
|
|
12
|
+
*
|
|
13
|
+
* const app = t.get("/hello").use(honoMw(cors()));
|
|
14
|
+
* // or
|
|
15
|
+
* const customCors = middleware(honoMw(cors()));
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
export function honoMw(
|
|
19
|
+
middleware: MiddlewareHandler,
|
|
20
|
+
): (ctx: unknown, next: any) => Promise<Response> {
|
|
21
|
+
return createTaserCompatHandler(middleware) as (ctx: unknown, next: any) => Promise<Response>;
|
|
22
|
+
}
|
package/src/middleware/jwk.ts
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import type { MiddlewareHandler } from "hono";
|
|
2
1
|
import { jwk as honoJwk } from "hono/jwk";
|
|
3
2
|
|
|
4
|
-
import {
|
|
3
|
+
import { middleware } from "../define/middleware.js";
|
|
4
|
+
import { honoMw } from "./hono-mw.js";
|
|
5
5
|
import type { JwtMiddlewareUnit, JwtPayloadState } from "./jwt.js";
|
|
6
|
-
import { extractJwtPayload } from "./wrap-hono.js";
|
|
7
6
|
|
|
8
7
|
export type JwkOptions = Parameters<typeof honoJwk>[0];
|
|
9
8
|
|
|
@@ -41,9 +40,12 @@ export function jwk<TPayload = Record<string, unknown>>(
|
|
|
41
40
|
|
|
42
41
|
const { allowInsecure: _allowInsecure, ...honoOptions } = options;
|
|
43
42
|
const safeInit = init?.headers !== undefined ? { headers: init.headers } : undefined;
|
|
44
|
-
const
|
|
45
|
-
|
|
46
|
-
return
|
|
47
|
-
|
|
48
|
-
|
|
43
|
+
const mw = honoMw(honoJwk(honoOptions, safeInit));
|
|
44
|
+
|
|
45
|
+
return middleware<JwtPayloadState<TPayload>>((ctx, next) =>
|
|
46
|
+
mw(ctx, async () => {
|
|
47
|
+
const payload = (ctx as unknown as { var: { jwtPayload?: unknown } }).var.jwtPayload;
|
|
48
|
+
return next({ jwtPayload: payload as TPayload });
|
|
49
|
+
}),
|
|
50
|
+
);
|
|
49
51
|
}
|
package/src/middleware/jwt.ts
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import type { MiddlewareHandler } from "hono";
|
|
2
1
|
import { jwt as honoJwt } from "hono/jwt";
|
|
3
2
|
|
|
4
|
-
import {
|
|
3
|
+
import { middleware } from "../define/middleware.js";
|
|
5
4
|
import type { MiddlewareReturnFromParts, MiddlewareUnit } from "../types/units.js";
|
|
6
|
-
import {
|
|
5
|
+
import { honoMw } from "./hono-mw.js";
|
|
7
6
|
|
|
8
7
|
export type JwtPayloadState<TPayload> = {
|
|
9
8
|
jwtPayload: TPayload;
|
|
@@ -22,8 +21,11 @@ export type JwtOptions = Parameters<typeof honoJwt>[0];
|
|
|
22
21
|
export function jwt<TPayload = Record<string, unknown>>(
|
|
23
22
|
options: JwtOptions,
|
|
24
23
|
): JwtMiddlewareUnit<TPayload> {
|
|
25
|
-
const
|
|
26
|
-
return
|
|
27
|
-
|
|
28
|
-
|
|
24
|
+
const mw = honoMw(honoJwt(options));
|
|
25
|
+
return middleware<JwtPayloadState<TPayload>>((ctx, next) =>
|
|
26
|
+
mw(ctx, async () => {
|
|
27
|
+
const payload = (ctx as unknown as { var: { jwtPayload?: unknown } }).var.jwtPayload;
|
|
28
|
+
return next({ jwtPayload: payload as TPayload });
|
|
29
|
+
}),
|
|
30
|
+
);
|
|
29
31
|
}
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { secureHeaders as honoSecureHeaders } from "hono/secure-headers";
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
const wrapped = wrapHonoMiddleware(honoSecureHeaders);
|
|
3
|
+
import { middleware } from "../define/middleware.js";
|
|
4
|
+
import { honoMw } from "./hono-mw.js";
|
|
6
5
|
|
|
7
6
|
export function secureHeaders(...args: Parameters<typeof honoSecureHeaders>) {
|
|
8
|
-
return
|
|
7
|
+
return middleware(honoMw(honoSecureHeaders(...args)));
|
|
9
8
|
}
|
|
10
9
|
|
|
11
10
|
export type SecureHeadersOptions = NonNullable<Parameters<typeof honoSecureHeaders>[0]>;
|
package/src/middleware/timing.ts
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { timing as honoTiming } from "hono/timing";
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
const wrapped = wrapHonoMiddleware(honoTiming);
|
|
3
|
+
import { middleware } from "../define/middleware.js";
|
|
4
|
+
import { honoMw } from "./hono-mw.js";
|
|
6
5
|
|
|
7
6
|
export function timing(...args: Parameters<typeof honoTiming>) {
|
|
8
|
-
return
|
|
7
|
+
return middleware(honoMw(honoTiming(...args)));
|
|
9
8
|
}
|
|
10
9
|
|
|
11
10
|
export type TimingOptions = NonNullable<Parameters<typeof honoTiming>[0]>;
|
package/src/types/index.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Awaitable, TaserCookieJar, TaserHeaders } from "@taserjs/router-core";
|
|
2
|
-
import type { RouterRegister } from "../
|
|
2
|
+
import type { RouterRegister } from "../index.js";
|
|
3
3
|
import type {
|
|
4
4
|
MergeMiddlewareField,
|
|
5
5
|
MergeMiddlewareInputField,
|
|
@@ -12,15 +12,13 @@ import type {
|
|
|
12
12
|
import type { ReturnsMap, ValidHandlerReply } from "./returns.js";
|
|
13
13
|
import type { Schema } from "./schema.js";
|
|
14
14
|
import type {
|
|
15
|
-
|
|
15
|
+
EmptyAppContext,
|
|
16
16
|
ExtractState,
|
|
17
|
-
HandlerContext,
|
|
18
|
-
HandlerUnit,
|
|
19
|
-
InlineMiddlewareOptions,
|
|
20
17
|
Method,
|
|
21
18
|
MiddlewareDefinition,
|
|
22
19
|
MiddlewareReturnFromParts,
|
|
23
20
|
MiddlewareUnit,
|
|
21
|
+
NextFn,
|
|
24
22
|
ValidatorParts,
|
|
25
23
|
} from "./units.js";
|
|
26
24
|
|
|
@@ -32,7 +30,6 @@ export type {
|
|
|
32
30
|
Schema,
|
|
33
31
|
StandardSchemaV1,
|
|
34
32
|
} from "./schema.js";
|
|
35
|
-
export type { RouterRegister } from "../register.js";
|
|
36
33
|
export type {
|
|
37
34
|
MergeMiddlewareField,
|
|
38
35
|
MergeMiddlewareInputField,
|
|
@@ -54,18 +51,15 @@ export type {
|
|
|
54
51
|
ValidHandlerReply,
|
|
55
52
|
} from "./returns.js";
|
|
56
53
|
export type {
|
|
57
|
-
|
|
54
|
+
EmptyAppContext,
|
|
58
55
|
ExtractState,
|
|
59
|
-
HandlerContext,
|
|
60
|
-
HandlerUnit,
|
|
61
56
|
HttpMethod,
|
|
62
|
-
InlineMiddlewareOptions,
|
|
63
57
|
IsUnknown,
|
|
64
58
|
Method,
|
|
65
59
|
MiddlewareDefinition,
|
|
66
|
-
MiddlewareNext,
|
|
67
60
|
MiddlewareReturnFromParts,
|
|
68
61
|
MiddlewareUnit,
|
|
62
|
+
MiddlewareUnitBuilder,
|
|
69
63
|
NextFn,
|
|
70
64
|
NextResult,
|
|
71
65
|
StandaloneMiddlewareContext,
|
|
@@ -73,6 +67,8 @@ export type {
|
|
|
73
67
|
ValidatorParts,
|
|
74
68
|
} from "./units.js";
|
|
75
69
|
|
|
70
|
+
export type AppContext = RouterRegister extends { AppContext: infer C } ? C : EmptyAppContext;
|
|
71
|
+
|
|
76
72
|
export type RoutePath = RouterRegister extends { RoutePath: infer P } ? P : never;
|
|
77
73
|
export type LayoutId = RouterRegister extends { LayoutId: infer L } ? L : never;
|
|
78
74
|
export type LayoutTree = RouterRegister extends { LayoutTree: infer T } ? T : Record<never, never>;
|
|
@@ -80,6 +76,12 @@ export type RouteByPathMethod = RouterRegister extends { RouteByPathMethod: infe
|
|
|
80
76
|
? R
|
|
81
77
|
: Record<never, never>;
|
|
82
78
|
|
|
79
|
+
export type LayoutBuilder<TAppContext extends Record<string, unknown> = AppContext> = <
|
|
80
|
+
const Layout extends LayoutId,
|
|
81
|
+
>(
|
|
82
|
+
layout: Layout,
|
|
83
|
+
) => MiddlewareBuilder<Layout, readonly [], TAppContext>;
|
|
84
|
+
|
|
83
85
|
type ParseParam<Segment extends string> = Segment extends "*"
|
|
84
86
|
? { _splat: string }
|
|
85
87
|
: Segment extends `:${infer Name extends string}`
|
|
@@ -103,25 +105,41 @@ export type ResolveParams<TPathParams, TSchemaParams> =
|
|
|
103
105
|
: Simplify<Omit<TPathParams, keyof TSchemaParams> & TSchemaParams>
|
|
104
106
|
: TPathParams;
|
|
105
107
|
|
|
106
|
-
type
|
|
107
|
-
|
|
108
|
+
type LayoutParentsMap = RouterRegister extends {
|
|
109
|
+
LayoutParents: infer LP extends Record<string, unknown>;
|
|
108
110
|
}
|
|
109
|
-
?
|
|
110
|
-
:
|
|
111
|
+
? LP
|
|
112
|
+
: {};
|
|
111
113
|
|
|
112
|
-
type
|
|
114
|
+
type LayoutParent<Layout extends LayoutId> = Layout extends keyof LayoutParentsMap
|
|
115
|
+
? LayoutParentsMap[Layout] extends LayoutId
|
|
116
|
+
? LayoutParentsMap[Layout]
|
|
117
|
+
: null
|
|
118
|
+
: LayoutTree[Layout] extends {
|
|
119
|
+
parent: infer Parent extends LayoutId | null;
|
|
120
|
+
}
|
|
121
|
+
? Parent
|
|
122
|
+
: null;
|
|
123
|
+
|
|
124
|
+
type ResolveLayoutMiddlewares<
|
|
125
|
+
Layout extends LayoutId | null,
|
|
126
|
+
Depth extends readonly unknown[] = [],
|
|
127
|
+
> = Depth["length"] extends 10
|
|
113
128
|
? readonly []
|
|
114
129
|
: Layout extends LayoutId
|
|
115
130
|
? readonly [
|
|
116
|
-
...ResolveLayoutMiddlewares<LayoutParent<Layout
|
|
131
|
+
...ResolveLayoutMiddlewares<LayoutParent<Layout>, [...Depth, unknown]>,
|
|
117
132
|
...LayoutTree[Layout]["middlewares"],
|
|
118
133
|
]
|
|
119
134
|
: readonly [];
|
|
120
135
|
|
|
121
|
-
export type ResolveLayoutIdChain<
|
|
136
|
+
export type ResolveLayoutIdChain<
|
|
137
|
+
L extends LayoutId | null,
|
|
138
|
+
Depth extends readonly unknown[] = [],
|
|
139
|
+
> = Depth["length"] extends 10
|
|
122
140
|
? readonly []
|
|
123
141
|
: L extends LayoutId
|
|
124
|
-
? readonly [...ResolveLayoutIdChain<LayoutParent<L
|
|
142
|
+
? readonly [...ResolveLayoutIdChain<LayoutParent<L>, [...Depth, unknown]>, L]
|
|
125
143
|
: readonly [];
|
|
126
144
|
|
|
127
145
|
export type ResolveLayoutMiddlewaresState<Layout extends LayoutId | null> = Layout extends LayoutId
|
|
@@ -192,13 +210,6 @@ type RouteResolvedField<
|
|
|
192
210
|
Field extends "query" | "params" | "body" | "state",
|
|
193
211
|
> = RouteLayoutField<Path, TMethod, Field> & MergeMiddlewareField<Acc, Field>;
|
|
194
212
|
|
|
195
|
-
type RouteChainField<
|
|
196
|
-
Path extends RoutePath,
|
|
197
|
-
TMethod extends Method,
|
|
198
|
-
Acc extends readonly unknown[],
|
|
199
|
-
Field extends "query" | "params" | "body" | "state",
|
|
200
|
-
> = RouteResolvedField<Path, TMethod, Acc, Field>;
|
|
201
|
-
|
|
202
213
|
export type RouteChainContext<
|
|
203
214
|
Path extends RoutePath,
|
|
204
215
|
TMethod extends Method,
|
|
@@ -210,15 +221,15 @@ export type RouteChainContext<
|
|
|
210
221
|
> = Simplify<
|
|
211
222
|
TAppContext &
|
|
212
223
|
UnitRuntimeContext & {
|
|
213
|
-
query: Simplify<MergePart<TQuery,
|
|
224
|
+
query: Simplify<MergePart<TQuery, RouteResolvedField<Path, TMethod, Acc, "query">>>;
|
|
214
225
|
params: Simplify<
|
|
215
226
|
ResolveParams<
|
|
216
227
|
PathParams<Path>,
|
|
217
|
-
MergePart<TParams,
|
|
228
|
+
MergePart<TParams, RouteResolvedField<Path, TMethod, Acc, "params">>
|
|
218
229
|
>
|
|
219
230
|
>;
|
|
220
|
-
body: Simplify<MergePart<TBody,
|
|
221
|
-
state: Simplify<
|
|
231
|
+
body: Simplify<MergePart<TBody, RouteResolvedField<Path, TMethod, Acc, "body">>>;
|
|
232
|
+
state: Simplify<RouteResolvedField<Path, TMethod, Acc, "state">>;
|
|
222
233
|
headers: TaserHeaders;
|
|
223
234
|
cookies: TaserCookieJar;
|
|
224
235
|
}
|
|
@@ -482,41 +493,14 @@ export type MiddlewareBuilder<
|
|
|
482
493
|
},
|
|
483
494
|
]
|
|
484
495
|
): MiddlewareBuilder<Layout, readonly [...Acc, TAcc], TAppContext>;
|
|
485
|
-
use<
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
TQueryIn = unknown,
|
|
491
|
-
TParamsIn = unknown,
|
|
492
|
-
TBodyIn = unknown,
|
|
493
|
-
R = unknown,
|
|
494
|
-
>(
|
|
495
|
-
options: InlineMiddlewareOptions<
|
|
496
|
-
MiddlewareChainContext<Layout, Acc, TQuery, TParams, TBody, TAppContext>,
|
|
497
|
-
TQuery,
|
|
498
|
-
TParams,
|
|
499
|
-
TBody,
|
|
500
|
-
TReturns,
|
|
501
|
-
TQueryIn,
|
|
502
|
-
TParamsIn,
|
|
503
|
-
TBodyIn,
|
|
504
|
-
R
|
|
505
|
-
>,
|
|
496
|
+
use<R = unknown>(
|
|
497
|
+
fn: (
|
|
498
|
+
ctx: MiddlewareChainContext<Layout, Acc, unknown, unknown, unknown, TAppContext>,
|
|
499
|
+
next: NextFn,
|
|
500
|
+
) => Awaitable<R>,
|
|
506
501
|
): MiddlewareBuilder<
|
|
507
502
|
Layout,
|
|
508
|
-
readonly [
|
|
509
|
-
...Acc,
|
|
510
|
-
MiddlewareReturnFromParts<
|
|
511
|
-
TQuery,
|
|
512
|
-
TParams,
|
|
513
|
-
TBody,
|
|
514
|
-
ExtractState<R>,
|
|
515
|
-
TQueryIn,
|
|
516
|
-
TParamsIn,
|
|
517
|
-
TBodyIn
|
|
518
|
-
>,
|
|
519
|
-
],
|
|
503
|
+
readonly [...Acc, MiddlewareReturnFromParts<unknown, unknown, unknown, ExtractState<R>>],
|
|
520
504
|
TAppContext
|
|
521
505
|
>;
|
|
522
506
|
};
|
|
@@ -532,7 +516,6 @@ export type RouteExport<
|
|
|
532
516
|
readonly method: TMethod | "ANY" | "ALL";
|
|
533
517
|
readonly methods?: readonly Method[];
|
|
534
518
|
readonly middlewares: readonly MiddlewareDefinition[];
|
|
535
|
-
readonly handlerMiddlewares: readonly MiddlewareDefinition[];
|
|
536
519
|
readonly returns?: TReturns;
|
|
537
520
|
readonly bodyMode?: "json" | "form" | "urlencoded";
|
|
538
521
|
handler: (ctx: unknown) => Awaitable<Response>;
|
|
@@ -548,9 +531,6 @@ export type RouteExport<
|
|
|
548
531
|
query?: Schema<unknown>;
|
|
549
532
|
params?: Schema<unknown>;
|
|
550
533
|
body?: Schema<unknown>;
|
|
551
|
-
handlerQuery?: Schema<unknown>;
|
|
552
|
-
handlerParams?: Schema<unknown>;
|
|
553
|
-
handlerBody?: Schema<unknown>;
|
|
554
534
|
};
|
|
555
535
|
|
|
556
536
|
type RouteHandleResult<
|
|
@@ -639,44 +619,17 @@ export type RouteBuilderBase<
|
|
|
639
619
|
Omit<TReturns, keyof UReturns> & UReturns,
|
|
640
620
|
TAppContext
|
|
641
621
|
>;
|
|
642
|
-
use<
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
TQueryIn = unknown,
|
|
648
|
-
TParamsIn = unknown,
|
|
649
|
-
TBodyIn = unknown,
|
|
650
|
-
R = unknown,
|
|
651
|
-
>(
|
|
652
|
-
options: InlineMiddlewareOptions<
|
|
653
|
-
RouteChainContext<Path, TMethod, Acc, TQuery, TParams, TBody, TAppContext>,
|
|
654
|
-
TQuery,
|
|
655
|
-
TParams,
|
|
656
|
-
TBody,
|
|
657
|
-
UReturns,
|
|
658
|
-
TQueryIn,
|
|
659
|
-
TParamsIn,
|
|
660
|
-
TBodyIn,
|
|
661
|
-
R
|
|
662
|
-
>,
|
|
622
|
+
use<R = unknown>(
|
|
623
|
+
fn: (
|
|
624
|
+
ctx: RouteChainContext<Path, TMethod, Acc, unknown, unknown, unknown, TAppContext>,
|
|
625
|
+
next: NextFn,
|
|
626
|
+
) => Awaitable<R>,
|
|
663
627
|
): RouteBuilder<
|
|
664
628
|
Path,
|
|
665
629
|
TMethod,
|
|
666
|
-
readonly [
|
|
667
|
-
...Acc,
|
|
668
|
-
MiddlewareReturnFromParts<
|
|
669
|
-
TQuery,
|
|
670
|
-
TParams,
|
|
671
|
-
TBody,
|
|
672
|
-
ExtractState<R>,
|
|
673
|
-
TQueryIn,
|
|
674
|
-
TParamsIn,
|
|
675
|
-
TBodyIn
|
|
676
|
-
>,
|
|
677
|
-
],
|
|
630
|
+
readonly [...Acc, MiddlewareReturnFromParts<unknown, unknown, unknown, ExtractState<R>>],
|
|
678
631
|
Validators,
|
|
679
|
-
|
|
632
|
+
TReturns,
|
|
680
633
|
TAppContext
|
|
681
634
|
>;
|
|
682
635
|
handler<R extends Response = Response>(
|
|
@@ -694,22 +647,6 @@ export type RouteBuilderBase<
|
|
|
694
647
|
},
|
|
695
648
|
]
|
|
696
649
|
): RouteHandleResult<Path, TMethod, Acc, Validators, TReturns, R, TAppContext>;
|
|
697
|
-
handler<
|
|
698
|
-
HandlerAcc extends readonly unknown[] = readonly [],
|
|
699
|
-
HandlerValidators extends ValidatorParts = ValidatorParts,
|
|
700
|
-
HReturns extends ReturnsMap = {},
|
|
701
|
-
HOutput = Response,
|
|
702
|
-
>(
|
|
703
|
-
unit: HandlerUnit<HandlerAcc, HandlerValidators, HReturns, HOutput>,
|
|
704
|
-
): RouteHandleResult<
|
|
705
|
-
Path,
|
|
706
|
-
TMethod,
|
|
707
|
-
readonly [...Acc, ...HandlerAcc],
|
|
708
|
-
Validators,
|
|
709
|
-
Omit<TReturns, keyof HReturns> & HReturns,
|
|
710
|
-
HOutput,
|
|
711
|
-
TAppContext
|
|
712
|
-
>;
|
|
713
650
|
};
|
|
714
651
|
|
|
715
652
|
export type RouteBuilder<
|
|
@@ -746,85 +683,6 @@ export type RouteBuilder<
|
|
|
746
683
|
>;
|
|
747
684
|
});
|
|
748
685
|
|
|
749
|
-
export type HandlerBuilder<
|
|
750
|
-
Acc extends readonly unknown[] = readonly [],
|
|
751
|
-
Validators extends ValidatorParts = {},
|
|
752
|
-
TReturns extends ReturnsMap = {},
|
|
753
|
-
TAppContext extends Record<string, unknown> = AppContext,
|
|
754
|
-
> = {
|
|
755
|
-
returns<const M extends ReturnsMap>(
|
|
756
|
-
map: M,
|
|
757
|
-
): HandlerBuilder<Acc, Validators, Omit<TReturns, keyof M> & M, TAppContext>;
|
|
758
|
-
use<TAcc, UReturns extends ReturnsMap = {}, TRequiredLayouts = unknown, TRequiredState = unknown>(
|
|
759
|
-
unit: MiddlewareUnit<TAcc, UReturns, TRequiredLayouts, TRequiredState>,
|
|
760
|
-
..._assert: [IsStateSatisfied<MergeMiddlewareField<Acc, "state">, TRequiredState>] extends [
|
|
761
|
-
true,
|
|
762
|
-
]
|
|
763
|
-
? []
|
|
764
|
-
: [
|
|
765
|
-
{
|
|
766
|
-
error: "Middleware cannot be attached to this handler";
|
|
767
|
-
requiredState: TRequiredState;
|
|
768
|
-
actualState: MergeMiddlewareField<Acc, "state">;
|
|
769
|
-
},
|
|
770
|
-
]
|
|
771
|
-
): HandlerBuilder<
|
|
772
|
-
readonly [...Acc, TAcc],
|
|
773
|
-
Validators,
|
|
774
|
-
Omit<TReturns, keyof UReturns> & UReturns,
|
|
775
|
-
TAppContext
|
|
776
|
-
>;
|
|
777
|
-
use<
|
|
778
|
-
TQuery = unknown,
|
|
779
|
-
TParams = unknown,
|
|
780
|
-
TBody = unknown,
|
|
781
|
-
UReturns extends ReturnsMap = {},
|
|
782
|
-
TQueryIn = unknown,
|
|
783
|
-
TParamsIn = unknown,
|
|
784
|
-
TBodyIn = unknown,
|
|
785
|
-
R = unknown,
|
|
786
|
-
>(
|
|
787
|
-
options: InlineMiddlewareOptions<
|
|
788
|
-
HandlerContext<Acc, { query: TQuery; params: TParams; body: TBody }, TAppContext>,
|
|
789
|
-
TQuery,
|
|
790
|
-
TParams,
|
|
791
|
-
TBody,
|
|
792
|
-
UReturns,
|
|
793
|
-
TQueryIn,
|
|
794
|
-
TParamsIn,
|
|
795
|
-
TBodyIn,
|
|
796
|
-
R
|
|
797
|
-
>,
|
|
798
|
-
): HandlerBuilder<
|
|
799
|
-
readonly [
|
|
800
|
-
...Acc,
|
|
801
|
-
MiddlewareReturnFromParts<
|
|
802
|
-
TQuery,
|
|
803
|
-
TParams,
|
|
804
|
-
TBody,
|
|
805
|
-
ExtractState<R>,
|
|
806
|
-
TQueryIn,
|
|
807
|
-
TParamsIn,
|
|
808
|
-
TBodyIn
|
|
809
|
-
>,
|
|
810
|
-
],
|
|
811
|
-
Validators,
|
|
812
|
-
Omit<TReturns, keyof UReturns> & UReturns,
|
|
813
|
-
TAppContext
|
|
814
|
-
>;
|
|
815
|
-
handler<R extends Response = Response>(
|
|
816
|
-
fn: (ctx: HandlerContext<Acc, Validators, TAppContext>) => Awaitable<R>,
|
|
817
|
-
..._assert: [R] extends [ValidHandlerReply<R, TReturns>]
|
|
818
|
-
? []
|
|
819
|
-
: [
|
|
820
|
-
{
|
|
821
|
-
expected: ValidHandlerReply<R, TReturns>;
|
|
822
|
-
actual: R;
|
|
823
|
-
},
|
|
824
|
-
]
|
|
825
|
-
): HandlerUnit<Acc, Validators, TReturns, R>;
|
|
826
|
-
};
|
|
827
|
-
|
|
828
686
|
export type RouteDefinition<
|
|
829
687
|
Path extends RoutePath = RoutePath,
|
|
830
688
|
TMethod extends Method = Method,
|
package/src/types/type-utils.ts
CHANGED
|
@@ -63,16 +63,20 @@ export type MiddlewareInputField<
|
|
|
63
63
|
export type MergeMiddlewareField<
|
|
64
64
|
Middlewares extends readonly unknown[],
|
|
65
65
|
Field extends MiddlewareFieldName,
|
|
66
|
-
> =
|
|
66
|
+
> = Middlewares extends readonly []
|
|
67
67
|
? {}
|
|
68
|
-
:
|
|
68
|
+
: Middlewares extends readonly [infer Head, ...infer Tail]
|
|
69
|
+
? MiddlewareField<Head, Field> & MergeMiddlewareField<Tail, Field>
|
|
70
|
+
: MiddlewareField<Middlewares[number], Field>;
|
|
69
71
|
|
|
70
72
|
export type MergeMiddlewareInputField<
|
|
71
73
|
Middlewares extends readonly unknown[],
|
|
72
74
|
Field extends MiddlewareInputFieldName,
|
|
73
|
-
> =
|
|
75
|
+
> = Middlewares extends readonly []
|
|
74
76
|
? {}
|
|
75
|
-
:
|
|
77
|
+
: Middlewares extends readonly [infer Head, ...infer Tail]
|
|
78
|
+
? MiddlewareInputField<Head, Field> & MergeMiddlewareInputField<Tail, Field>
|
|
79
|
+
: MiddlewareInputField<Middlewares[number], Field>;
|
|
76
80
|
|
|
77
81
|
export type RuntimeContextFields = {
|
|
78
82
|
request: Request;
|