@taserjs/router 0.1.4 → 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/dist/cjs/builder/factories.cjs.map +1 -1
- package/dist/cjs/builder/factories.d.cts +9 -9
- package/dist/cjs/builder/middleware-unit.cjs +21 -12
- package/dist/cjs/builder/middleware-unit.cjs.map +1 -1
- package/dist/cjs/builder/middleware-unit.d.cts +1 -18
- package/dist/cjs/builder/middleware.cjs +1 -0
- package/dist/cjs/builder/middleware.cjs.map +1 -1
- package/dist/cjs/builder/route.cjs +1 -0
- package/dist/cjs/builder/route.cjs.map +1 -1
- package/dist/cjs/builder/router.cjs +1 -16
- package/dist/cjs/builder/router.cjs.map +1 -1
- package/dist/cjs/builder/router.d.cts +6 -17
- 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 +2 -3
- package/dist/cjs/define/middleware.cjs.map +1 -1
- package/dist/cjs/define/middleware.d.cts +15 -16
- package/dist/cjs/index.cjs +13 -2
- package/dist/cjs/index.d.cts +5 -3
- package/dist/cjs/middleware/body-limit.cjs +1 -1
- 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 +1 -1
- package/dist/cjs/middleware/compress.cjs.map +1 -1
- package/dist/cjs/middleware/compress.d.cts +1 -1
- package/dist/cjs/middleware/cors.cjs +1 -1
- package/dist/cjs/middleware/cors.cjs.map +1 -1
- package/dist/cjs/middleware/cors.d.cts +1 -1
- package/dist/cjs/middleware/csrf.cjs +1 -1
- package/dist/cjs/middleware/csrf.cjs.map +1 -1
- package/dist/cjs/middleware/csrf.d.cts +1 -1
- package/dist/cjs/middleware/etag.cjs +1 -1
- 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 +1 -1
- package/dist/cjs/middleware/hono-mw.cjs.map +1 -1
- package/dist/cjs/middleware/hono-mw.d.cts +1 -1
- package/dist/cjs/middleware/jwk.cjs +1 -1
- package/dist/cjs/middleware/jwk.cjs.map +1 -1
- package/dist/cjs/middleware/jwt.cjs +1 -1
- package/dist/cjs/middleware/jwt.cjs.map +1 -1
- package/dist/cjs/middleware/secure-headers.cjs +1 -1
- 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 +1 -1
- 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 +18 -13
- package/dist/cjs/types/type-utils.d.cts +2 -2
- package/dist/cjs/types/units.d.cts +17 -19
- 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 -18
- package/dist/esm/builder/middleware-unit.js +21 -12
- package/dist/esm/builder/middleware-unit.js.map +1 -1
- package/dist/esm/builder/middleware.js +1 -0
- package/dist/esm/builder/middleware.js.map +1 -1
- package/dist/esm/builder/route.js +1 -0
- package/dist/esm/builder/route.js.map +1 -1
- package/dist/esm/builder/router.d.ts +6 -17
- package/dist/esm/builder/router.js +1 -16
- 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 +15 -16
- package/dist/esm/define/middleware.js +2 -3
- package/dist/esm/define/middleware.js.map +1 -1
- package/dist/esm/index.d.ts +5 -3
- package/dist/esm/index.js +2 -2
- package/dist/esm/middleware/body-limit.d.ts +1 -1
- package/dist/esm/middleware/body-limit.js +2 -2
- 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 +2 -2
- package/dist/esm/middleware/compress.js.map +1 -1
- package/dist/esm/middleware/cors.d.ts +1 -1
- package/dist/esm/middleware/cors.js +2 -2
- package/dist/esm/middleware/cors.js.map +1 -1
- package/dist/esm/middleware/csrf.d.ts +1 -1
- package/dist/esm/middleware/csrf.js +2 -2
- package/dist/esm/middleware/csrf.js.map +1 -1
- package/dist/esm/middleware/etag.d.ts +1 -1
- package/dist/esm/middleware/etag.js +2 -2
- package/dist/esm/middleware/etag.js.map +1 -1
- package/dist/esm/middleware/hono-mw.d.ts +1 -1
- package/dist/esm/middleware/hono-mw.js +1 -1
- package/dist/esm/middleware/hono-mw.js.map +1 -1
- package/dist/esm/middleware/jwk.js +2 -2
- package/dist/esm/middleware/jwk.js.map +1 -1
- package/dist/esm/middleware/jwt.js +2 -2
- 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 +2 -2
- 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 +2 -2
- package/dist/esm/middleware/timing.js.map +1 -1
- package/dist/esm/types/index.d.ts +18 -13
- package/dist/esm/types/type-utils.d.ts +2 -2
- package/dist/esm/types/units.d.ts +17 -19
- package/package.json +3 -3
- package/src/builder/factories.ts +2 -2
- package/src/builder/middleware-unit.ts +22 -11
- package/src/builder/middleware.ts +2 -0
- package/src/builder/route.ts +2 -0
- package/src/builder/router.ts +7 -60
- package/src/builder/standalone.ts +70 -0
- package/src/define/middleware.ts +37 -18
- package/src/index.ts +26 -2
- package/src/middleware/body-limit.ts +2 -2
- package/src/middleware/compress.ts +2 -2
- package/src/middleware/cors.ts +2 -2
- package/src/middleware/csrf.ts +2 -2
- package/src/middleware/etag.ts +2 -2
- package/src/middleware/hono-mw.ts +1 -1
- package/src/middleware/jwk.ts +2 -2
- package/src/middleware/jwt.ts +2 -2
- package/src/middleware/secure-headers.ts +2 -2
- package/src/middleware/timing.ts +2 -2
- package/src/types/index.ts +39 -24
- package/src/types/type-utils.ts +8 -4
- package/src/types/units.ts +46 -22
- package/dist/cjs/register.d.cts +0 -2
- package/dist/esm/register.d.ts +0 -2
- package/src/register.ts +0 -1
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { bodyLimit as honoBodyLimit } from "hono/body-limit";
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { middleware } from "../define/middleware.js";
|
|
4
4
|
import { honoMw } from "./hono-mw.js";
|
|
5
5
|
|
|
6
6
|
export function bodyLimit(...args: Parameters<typeof honoBodyLimit>) {
|
|
7
|
-
return
|
|
7
|
+
return middleware(honoMw(honoBodyLimit(...args)));
|
|
8
8
|
}
|
|
9
9
|
|
|
10
10
|
export type BodyLimitOptions = Parameters<typeof honoBodyLimit>[0];
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { compress as honoCompress } from "hono/compress";
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { middleware } from "../define/middleware.js";
|
|
4
4
|
import { honoMw } from "./hono-mw.js";
|
|
5
5
|
|
|
6
6
|
export function compress(...args: Parameters<typeof honoCompress>) {
|
|
7
|
-
return
|
|
7
|
+
return middleware(honoMw(honoCompress(...args)));
|
|
8
8
|
}
|
|
9
9
|
|
|
10
10
|
export type CompressOptions = NonNullable<Parameters<typeof honoCompress>[0]>;
|
package/src/middleware/cors.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { cors as honoCors } from "hono/cors";
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { middleware } from "../define/middleware.js";
|
|
4
4
|
import { honoMw } from "./hono-mw.js";
|
|
5
5
|
|
|
6
6
|
export function cors(...args: Parameters<typeof honoCors>) {
|
|
7
|
-
return
|
|
7
|
+
return middleware(honoMw(honoCors(...args)));
|
|
8
8
|
}
|
|
9
9
|
|
|
10
10
|
export type CorsOptions = NonNullable<Parameters<typeof honoCors>[0]>;
|
package/src/middleware/csrf.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { csrf as honoCsrf } from "hono/csrf";
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { middleware } from "../define/middleware.js";
|
|
4
4
|
import { honoMw } from "./hono-mw.js";
|
|
5
5
|
|
|
6
6
|
export function csrf(...args: Parameters<typeof honoCsrf>) {
|
|
7
|
-
return
|
|
7
|
+
return middleware(honoMw(honoCsrf(...args)));
|
|
8
8
|
}
|
|
9
9
|
|
|
10
10
|
export type CsrfOptions = NonNullable<Parameters<typeof honoCsrf>[0]>;
|
package/src/middleware/etag.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { etag as honoEtag } from "hono/etag";
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { middleware } from "../define/middleware.js";
|
|
4
4
|
import { honoMw } from "./hono-mw.js";
|
|
5
5
|
|
|
6
6
|
export function etag(...args: Parameters<typeof honoEtag>) {
|
|
7
|
-
return
|
|
7
|
+
return middleware(honoMw(honoEtag(...args)));
|
|
8
8
|
}
|
|
9
9
|
|
|
10
10
|
export type EtagOptions = NonNullable<Parameters<typeof honoEtag>[0]>;
|
|
@@ -12,7 +12,7 @@ import type { MiddlewareHandler } from "hono";
|
|
|
12
12
|
*
|
|
13
13
|
* const app = t.get("/hello").use(honoMw(cors()));
|
|
14
14
|
* // or
|
|
15
|
-
* const customCors =
|
|
15
|
+
* const customCors = middleware(honoMw(cors()));
|
|
16
16
|
* ```
|
|
17
17
|
*/
|
|
18
18
|
export function honoMw(
|
package/src/middleware/jwk.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jwk as honoJwk } from "hono/jwk";
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { middleware } from "../define/middleware.js";
|
|
4
4
|
import { honoMw } from "./hono-mw.js";
|
|
5
5
|
import type { JwtMiddlewareUnit, JwtPayloadState } from "./jwt.js";
|
|
6
6
|
|
|
@@ -42,7 +42,7 @@ export function jwk<TPayload = Record<string, unknown>>(
|
|
|
42
42
|
const safeInit = init?.headers !== undefined ? { headers: init.headers } : undefined;
|
|
43
43
|
const mw = honoMw(honoJwk(honoOptions, safeInit));
|
|
44
44
|
|
|
45
|
-
return
|
|
45
|
+
return middleware<JwtPayloadState<TPayload>>((ctx, next) =>
|
|
46
46
|
mw(ctx, async () => {
|
|
47
47
|
const payload = (ctx as unknown as { var: { jwtPayload?: unknown } }).var.jwtPayload;
|
|
48
48
|
return next({ jwtPayload: payload as TPayload });
|
package/src/middleware/jwt.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jwt as honoJwt } from "hono/jwt";
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { middleware } from "../define/middleware.js";
|
|
4
4
|
import type { MiddlewareReturnFromParts, MiddlewareUnit } from "../types/units.js";
|
|
5
5
|
import { honoMw } from "./hono-mw.js";
|
|
6
6
|
|
|
@@ -22,7 +22,7 @@ export function jwt<TPayload = Record<string, unknown>>(
|
|
|
22
22
|
options: JwtOptions,
|
|
23
23
|
): JwtMiddlewareUnit<TPayload> {
|
|
24
24
|
const mw = honoMw(honoJwt(options));
|
|
25
|
-
return
|
|
25
|
+
return middleware<JwtPayloadState<TPayload>>((ctx, next) =>
|
|
26
26
|
mw(ctx, async () => {
|
|
27
27
|
const payload = (ctx as unknown as { var: { jwtPayload?: unknown } }).var.jwtPayload;
|
|
28
28
|
return next({ jwtPayload: payload as TPayload });
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { secureHeaders as honoSecureHeaders } from "hono/secure-headers";
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { middleware } from "../define/middleware.js";
|
|
4
4
|
import { honoMw } from "./hono-mw.js";
|
|
5
5
|
|
|
6
6
|
export function secureHeaders(...args: Parameters<typeof honoSecureHeaders>) {
|
|
7
|
-
return
|
|
7
|
+
return middleware(honoMw(honoSecureHeaders(...args)));
|
|
8
8
|
}
|
|
9
9
|
|
|
10
10
|
export type SecureHeadersOptions = NonNullable<Parameters<typeof honoSecureHeaders>[0]>;
|
package/src/middleware/timing.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { timing as honoTiming } from "hono/timing";
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { middleware } from "../define/middleware.js";
|
|
4
4
|
import { honoMw } from "./hono-mw.js";
|
|
5
5
|
|
|
6
6
|
export function timing(...args: Parameters<typeof honoTiming>) {
|
|
7
|
-
return
|
|
7
|
+
return middleware(honoMw(honoTiming(...args)));
|
|
8
8
|
}
|
|
9
9
|
|
|
10
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,7 +12,7 @@ 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
17
|
Method,
|
|
18
18
|
MiddlewareDefinition,
|
|
@@ -30,7 +30,6 @@ export type {
|
|
|
30
30
|
Schema,
|
|
31
31
|
StandardSchemaV1,
|
|
32
32
|
} from "./schema.js";
|
|
33
|
-
export type { RouterRegister } from "../register.js";
|
|
34
33
|
export type {
|
|
35
34
|
MergeMiddlewareField,
|
|
36
35
|
MergeMiddlewareInputField,
|
|
@@ -52,13 +51,12 @@ export type {
|
|
|
52
51
|
ValidHandlerReply,
|
|
53
52
|
} from "./returns.js";
|
|
54
53
|
export type {
|
|
55
|
-
|
|
54
|
+
EmptyAppContext,
|
|
56
55
|
ExtractState,
|
|
57
56
|
HttpMethod,
|
|
58
57
|
IsUnknown,
|
|
59
58
|
Method,
|
|
60
59
|
MiddlewareDefinition,
|
|
61
|
-
MiddlewareNext,
|
|
62
60
|
MiddlewareReturnFromParts,
|
|
63
61
|
MiddlewareUnit,
|
|
64
62
|
MiddlewareUnitBuilder,
|
|
@@ -69,6 +67,8 @@ export type {
|
|
|
69
67
|
ValidatorParts,
|
|
70
68
|
} from "./units.js";
|
|
71
69
|
|
|
70
|
+
export type AppContext = RouterRegister extends { AppContext: infer C } ? C : EmptyAppContext;
|
|
71
|
+
|
|
72
72
|
export type RoutePath = RouterRegister extends { RoutePath: infer P } ? P : never;
|
|
73
73
|
export type LayoutId = RouterRegister extends { LayoutId: infer L } ? L : never;
|
|
74
74
|
export type LayoutTree = RouterRegister extends { LayoutTree: infer T } ? T : Record<never, never>;
|
|
@@ -76,6 +76,12 @@ export type RouteByPathMethod = RouterRegister extends { RouteByPathMethod: infe
|
|
|
76
76
|
? R
|
|
77
77
|
: Record<never, never>;
|
|
78
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
|
+
|
|
79
85
|
type ParseParam<Segment extends string> = Segment extends "*"
|
|
80
86
|
? { _splat: string }
|
|
81
87
|
: Segment extends `:${infer Name extends string}`
|
|
@@ -99,25 +105,41 @@ export type ResolveParams<TPathParams, TSchemaParams> =
|
|
|
99
105
|
: Simplify<Omit<TPathParams, keyof TSchemaParams> & TSchemaParams>
|
|
100
106
|
: TPathParams;
|
|
101
107
|
|
|
102
|
-
type
|
|
103
|
-
|
|
108
|
+
type LayoutParentsMap = RouterRegister extends {
|
|
109
|
+
LayoutParents: infer LP extends Record<string, unknown>;
|
|
104
110
|
}
|
|
105
|
-
?
|
|
106
|
-
:
|
|
111
|
+
? LP
|
|
112
|
+
: {};
|
|
113
|
+
|
|
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;
|
|
107
123
|
|
|
108
|
-
type ResolveLayoutMiddlewares<
|
|
124
|
+
type ResolveLayoutMiddlewares<
|
|
125
|
+
Layout extends LayoutId | null,
|
|
126
|
+
Depth extends readonly unknown[] = [],
|
|
127
|
+
> = Depth["length"] extends 10
|
|
109
128
|
? readonly []
|
|
110
129
|
: Layout extends LayoutId
|
|
111
130
|
? readonly [
|
|
112
|
-
...ResolveLayoutMiddlewares<LayoutParent<Layout
|
|
131
|
+
...ResolveLayoutMiddlewares<LayoutParent<Layout>, [...Depth, unknown]>,
|
|
113
132
|
...LayoutTree[Layout]["middlewares"],
|
|
114
133
|
]
|
|
115
134
|
: readonly [];
|
|
116
135
|
|
|
117
|
-
export type ResolveLayoutIdChain<
|
|
136
|
+
export type ResolveLayoutIdChain<
|
|
137
|
+
L extends LayoutId | null,
|
|
138
|
+
Depth extends readonly unknown[] = [],
|
|
139
|
+
> = Depth["length"] extends 10
|
|
118
140
|
? readonly []
|
|
119
141
|
: L extends LayoutId
|
|
120
|
-
? readonly [...ResolveLayoutIdChain<LayoutParent<L
|
|
142
|
+
? readonly [...ResolveLayoutIdChain<LayoutParent<L>, [...Depth, unknown]>, L]
|
|
121
143
|
: readonly [];
|
|
122
144
|
|
|
123
145
|
export type ResolveLayoutMiddlewaresState<Layout extends LayoutId | null> = Layout extends LayoutId
|
|
@@ -188,13 +210,6 @@ type RouteResolvedField<
|
|
|
188
210
|
Field extends "query" | "params" | "body" | "state",
|
|
189
211
|
> = RouteLayoutField<Path, TMethod, Field> & MergeMiddlewareField<Acc, Field>;
|
|
190
212
|
|
|
191
|
-
type RouteChainField<
|
|
192
|
-
Path extends RoutePath,
|
|
193
|
-
TMethod extends Method,
|
|
194
|
-
Acc extends readonly unknown[],
|
|
195
|
-
Field extends "query" | "params" | "body" | "state",
|
|
196
|
-
> = RouteResolvedField<Path, TMethod, Acc, Field>;
|
|
197
|
-
|
|
198
213
|
export type RouteChainContext<
|
|
199
214
|
Path extends RoutePath,
|
|
200
215
|
TMethod extends Method,
|
|
@@ -206,15 +221,15 @@ export type RouteChainContext<
|
|
|
206
221
|
> = Simplify<
|
|
207
222
|
TAppContext &
|
|
208
223
|
UnitRuntimeContext & {
|
|
209
|
-
query: Simplify<MergePart<TQuery,
|
|
224
|
+
query: Simplify<MergePart<TQuery, RouteResolvedField<Path, TMethod, Acc, "query">>>;
|
|
210
225
|
params: Simplify<
|
|
211
226
|
ResolveParams<
|
|
212
227
|
PathParams<Path>,
|
|
213
|
-
MergePart<TParams,
|
|
228
|
+
MergePart<TParams, RouteResolvedField<Path, TMethod, Acc, "params">>
|
|
214
229
|
>
|
|
215
230
|
>;
|
|
216
|
-
body: Simplify<MergePart<TBody,
|
|
217
|
-
state: Simplify<
|
|
231
|
+
body: Simplify<MergePart<TBody, RouteResolvedField<Path, TMethod, Acc, "body">>>;
|
|
232
|
+
state: Simplify<RouteResolvedField<Path, TMethod, Acc, "state">>;
|
|
218
233
|
headers: TaserHeaders;
|
|
219
234
|
cookies: TaserCookieJar;
|
|
220
235
|
}
|
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;
|
package/src/types/units.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import type {
|
|
2
|
-
Awaitable,
|
|
3
2
|
MiddlewareDefinition as CoreMiddlewareDefinition,
|
|
4
3
|
TaserCookieJar,
|
|
5
4
|
TaserHeaders,
|
|
@@ -22,7 +21,7 @@ export type {
|
|
|
22
21
|
} from "./returns.js";
|
|
23
22
|
|
|
24
23
|
/** Default empty app context for standalone units without a bound router instance. */
|
|
25
|
-
export type
|
|
24
|
+
export type EmptyAppContext = Record<never, never>;
|
|
26
25
|
|
|
27
26
|
export type ValidatorParts = {
|
|
28
27
|
query?: unknown;
|
|
@@ -39,13 +38,17 @@ export type NextResult<TState = unknown> = Response & {
|
|
|
39
38
|
readonly [StateBrand]?: TState;
|
|
40
39
|
};
|
|
41
40
|
|
|
42
|
-
export type
|
|
43
|
-
?
|
|
44
|
-
|
|
45
|
-
|
|
41
|
+
export type ExtractStateFromUnion<T> = T extends { readonly [StateBrand]?: infer S }
|
|
42
|
+
? [S] extends [never]
|
|
43
|
+
? never
|
|
44
|
+
: [unknown] extends [S]
|
|
46
45
|
? {}
|
|
47
46
|
: S
|
|
48
|
-
|
|
47
|
+
: never;
|
|
48
|
+
|
|
49
|
+
export type ExtractState<T> = [ExtractStateFromUnion<Awaited<T>>] extends [never]
|
|
50
|
+
? {}
|
|
51
|
+
: ExtractStateFromUnion<Awaited<T>>;
|
|
49
52
|
|
|
50
53
|
export type IsUnknown<T> = [unknown] extends [T] ? true : false;
|
|
51
54
|
|
|
@@ -54,8 +57,6 @@ export type NextFn<TExpectedState = unknown> =
|
|
|
54
57
|
? <S extends Record<string, unknown> = {}>(state?: S) => Promise<NextResult<S>>
|
|
55
58
|
: (state: TExpectedState) => Promise<NextResult<TExpectedState>>;
|
|
56
59
|
|
|
57
|
-
export type MiddlewareNext = NextFn;
|
|
58
|
-
|
|
59
60
|
export type MiddlewareDefinition = CoreMiddlewareDefinition<ReturnsMap>;
|
|
60
61
|
|
|
61
62
|
export type MiddlewareReturnFromParts<
|
|
@@ -110,7 +111,7 @@ export type StandaloneMiddlewareContext<
|
|
|
110
111
|
TQuery = unknown,
|
|
111
112
|
TParams = unknown,
|
|
112
113
|
TBody = unknown,
|
|
113
|
-
TAppContext extends Record<string, unknown> =
|
|
114
|
+
TAppContext extends Record<string, unknown> = EmptyAppContext,
|
|
114
115
|
TState = {},
|
|
115
116
|
> = Simplify<
|
|
116
117
|
TAppContext &
|
|
@@ -124,12 +125,15 @@ export type StandaloneMiddlewareContext<
|
|
|
124
125
|
}
|
|
125
126
|
>;
|
|
126
127
|
|
|
128
|
+
export declare const MiddlewareUnitBrand: unique symbol;
|
|
129
|
+
|
|
127
130
|
export type MiddlewareUnit<
|
|
128
131
|
TAcc = unknown,
|
|
129
132
|
TReturns extends ReturnsMap = {},
|
|
130
133
|
TRequiredLayouts = unknown,
|
|
131
134
|
TRequiredState = unknown,
|
|
132
135
|
> = MiddlewareDefinition & {
|
|
136
|
+
readonly [MiddlewareUnitBrand]: true;
|
|
133
137
|
readonly __middlewareAcc: TAcc;
|
|
134
138
|
readonly __returns?: TReturns;
|
|
135
139
|
readonly __requiredLayouts?: TRequiredLayouts;
|
|
@@ -143,12 +147,26 @@ export type MiddlewareUnitBuilder<
|
|
|
143
147
|
TReturns extends ReturnsMap = {},
|
|
144
148
|
TRequiredLayouts = unknown,
|
|
145
149
|
TRequiredState = {},
|
|
146
|
-
TAppContext extends Record<string, unknown> =
|
|
150
|
+
TAppContext extends Record<string, unknown> = EmptyAppContext,
|
|
147
151
|
TInheritedState = {},
|
|
148
152
|
TQueryIn = unknown,
|
|
149
153
|
TParamsIn = unknown,
|
|
150
154
|
TBodyIn = unknown,
|
|
151
|
-
|
|
155
|
+
TExpectedState = unknown,
|
|
156
|
+
> = MiddlewareUnit<
|
|
157
|
+
MiddlewareReturnFromParts<
|
|
158
|
+
TQuery,
|
|
159
|
+
TParams,
|
|
160
|
+
TBody,
|
|
161
|
+
IsUnknown<TExpectedState> extends true ? {} : TExpectedState,
|
|
162
|
+
TQueryIn,
|
|
163
|
+
TParamsIn,
|
|
164
|
+
TBodyIn
|
|
165
|
+
>,
|
|
166
|
+
TReturns,
|
|
167
|
+
TRequiredLayouts,
|
|
168
|
+
TRequiredState
|
|
169
|
+
> & {
|
|
152
170
|
query<Q, QIn = unknown>(
|
|
153
171
|
schema: Schema<Q, QIn>,
|
|
154
172
|
): MiddlewareUnitBuilder<
|
|
@@ -162,7 +180,8 @@ export type MiddlewareUnitBuilder<
|
|
|
162
180
|
TInheritedState,
|
|
163
181
|
QIn,
|
|
164
182
|
TParamsIn,
|
|
165
|
-
TBodyIn
|
|
183
|
+
TBodyIn,
|
|
184
|
+
TExpectedState
|
|
166
185
|
>;
|
|
167
186
|
params<P, PIn = unknown>(
|
|
168
187
|
schema: Schema<P, PIn>,
|
|
@@ -177,7 +196,8 @@ export type MiddlewareUnitBuilder<
|
|
|
177
196
|
TInheritedState,
|
|
178
197
|
TQueryIn,
|
|
179
198
|
PIn,
|
|
180
|
-
TBodyIn
|
|
199
|
+
TBodyIn,
|
|
200
|
+
TExpectedState
|
|
181
201
|
>;
|
|
182
202
|
body<B, BIn = unknown>(
|
|
183
203
|
schema: Schema<B, BIn>,
|
|
@@ -192,7 +212,8 @@ export type MiddlewareUnitBuilder<
|
|
|
192
212
|
TInheritedState,
|
|
193
213
|
TQueryIn,
|
|
194
214
|
TParamsIn,
|
|
195
|
-
BIn
|
|
215
|
+
BIn,
|
|
216
|
+
TExpectedState
|
|
196
217
|
>;
|
|
197
218
|
body<Mode extends "json" | "form" | "urlencoded", B, BIn = unknown>(
|
|
198
219
|
mode: Mode,
|
|
@@ -208,7 +229,8 @@ export type MiddlewareUnitBuilder<
|
|
|
208
229
|
TInheritedState,
|
|
209
230
|
TQueryIn,
|
|
210
231
|
TParamsIn,
|
|
211
|
-
BIn
|
|
232
|
+
BIn,
|
|
233
|
+
TExpectedState
|
|
212
234
|
>;
|
|
213
235
|
returns<const M extends ReturnsMap>(
|
|
214
236
|
map: M,
|
|
@@ -223,7 +245,8 @@ export type MiddlewareUnitBuilder<
|
|
|
223
245
|
TInheritedState,
|
|
224
246
|
TQueryIn,
|
|
225
247
|
TParamsIn,
|
|
226
|
-
TBodyIn
|
|
248
|
+
TBodyIn,
|
|
249
|
+
TExpectedState
|
|
227
250
|
>;
|
|
228
251
|
requires<Requires extends Record<string, unknown>>(): MiddlewareUnitBuilder<
|
|
229
252
|
TQuery,
|
|
@@ -236,9 +259,10 @@ export type MiddlewareUnitBuilder<
|
|
|
236
259
|
TInheritedState,
|
|
237
260
|
TQueryIn,
|
|
238
261
|
TParamsIn,
|
|
239
|
-
TBodyIn
|
|
262
|
+
TBodyIn,
|
|
263
|
+
TExpectedState
|
|
240
264
|
>;
|
|
241
|
-
handler<
|
|
265
|
+
handler<R>(
|
|
242
266
|
fn: (
|
|
243
267
|
ctx: StandaloneMiddlewareContext<
|
|
244
268
|
TQuery,
|
|
@@ -247,13 +271,13 @@ export type MiddlewareUnitBuilder<
|
|
|
247
271
|
TAppContext,
|
|
248
272
|
TInheritedState & TRequiredState
|
|
249
273
|
>,
|
|
250
|
-
next: NextFn<
|
|
251
|
-
) =>
|
|
274
|
+
next: NextFn<TExpectedState>,
|
|
275
|
+
) => R,
|
|
252
276
|
): DefineMiddlewareResult<
|
|
253
277
|
TQuery,
|
|
254
278
|
TParams,
|
|
255
279
|
TBody,
|
|
256
|
-
|
|
280
|
+
IsUnknown<TExpectedState> extends true ? ExtractState<R> : TExpectedState,
|
|
257
281
|
R,
|
|
258
282
|
TQueryIn,
|
|
259
283
|
TParamsIn,
|
package/dist/cjs/register.d.cts
DELETED
package/dist/esm/register.d.ts
DELETED
package/src/register.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export interface RouterRegister {}
|