@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
package/src/builder/router.ts
CHANGED
|
@@ -6,32 +6,10 @@ import {
|
|
|
6
6
|
} from "@taserjs/router-core";
|
|
7
7
|
import { isPromise, normalizeOnError } from "@taserjs/router-utils";
|
|
8
8
|
|
|
9
|
-
import {
|
|
10
|
-
createAllRoute,
|
|
11
|
-
createAnyRoute,
|
|
12
|
-
createDeleteRoute,
|
|
13
|
-
createGetRoute,
|
|
14
|
-
createHeadRoute,
|
|
15
|
-
createOptionsRoute,
|
|
16
|
-
createPatchRoute,
|
|
17
|
-
createPostRoute,
|
|
18
|
-
createPutRoute,
|
|
19
|
-
} from "./factories.js";
|
|
20
|
-
import { defineHandler } from "../define/handler.js";
|
|
21
|
-
import { defineMiddleware, type DefineMiddlewareFn } from "../define/middleware.js";
|
|
22
|
-
import { createMiddleware } from "./middleware.js";
|
|
23
9
|
import { TaserApp } from "./app.js";
|
|
24
10
|
import type { ContextDefinition, CreateTaserAppOptions, OnErrorOptions } from "../types/app.js";
|
|
25
|
-
import type {
|
|
26
|
-
import type { HandlerBuilder, LayoutId, MiddlewareBuilder } from "../types/index.js";
|
|
11
|
+
import type { EmptyAppContext } from "../types/units.js";
|
|
27
12
|
import type { ReturnsMap } from "../types/returns.js";
|
|
28
|
-
import type { Schema } from "../types/schema.js";
|
|
29
|
-
import type {
|
|
30
|
-
CreateAllRoute,
|
|
31
|
-
CreateAnyRoute,
|
|
32
|
-
CreateWithBodyRoute,
|
|
33
|
-
CreateWithoutBodyRoute,
|
|
34
|
-
} from "./factories.js";
|
|
35
13
|
|
|
36
14
|
function toOnErrorHandler(
|
|
37
15
|
onErrorOptions: OnErrorOptions | OnErrorOptions["handle"],
|
|
@@ -49,10 +27,13 @@ type RouterState = {
|
|
|
49
27
|
const emptyContext: ContextDefinition<Record<string, unknown>, Record<string, unknown>> = {};
|
|
50
28
|
|
|
51
29
|
export class TaserRouter<
|
|
52
|
-
TAppContext extends Record<string, unknown> =
|
|
30
|
+
TAppContext extends Record<string, unknown> = EmptyAppContext,
|
|
53
31
|
THasNotFound extends boolean = false,
|
|
54
32
|
> {
|
|
55
33
|
private readonly state: RouterState;
|
|
34
|
+
readonly $Infer!: {
|
|
35
|
+
Context: TAppContext;
|
|
36
|
+
};
|
|
56
37
|
|
|
57
38
|
constructor(options: CreateTaserAppOptions = {}, state?: Partial<Omit<RouterState, "options">>) {
|
|
58
39
|
this.state = {
|
|
@@ -84,57 +65,6 @@ export class TaserRouter<
|
|
|
84
65
|
return this as unknown as TaserRouter<TAppContext, true>;
|
|
85
66
|
}
|
|
86
67
|
|
|
87
|
-
get: CreateWithoutBodyRoute<"GET", TAppContext> = createGetRoute as CreateWithoutBodyRoute<
|
|
88
|
-
"GET",
|
|
89
|
-
TAppContext
|
|
90
|
-
>;
|
|
91
|
-
post: CreateWithBodyRoute<"POST", TAppContext> = createPostRoute as CreateWithBodyRoute<
|
|
92
|
-
"POST",
|
|
93
|
-
TAppContext
|
|
94
|
-
>;
|
|
95
|
-
put: CreateWithBodyRoute<"PUT", TAppContext> = createPutRoute as CreateWithBodyRoute<
|
|
96
|
-
"PUT",
|
|
97
|
-
TAppContext
|
|
98
|
-
>;
|
|
99
|
-
patch: CreateWithBodyRoute<"PATCH", TAppContext> = createPatchRoute as CreateWithBodyRoute<
|
|
100
|
-
"PATCH",
|
|
101
|
-
TAppContext
|
|
102
|
-
>;
|
|
103
|
-
delete: CreateWithoutBodyRoute<"DELETE", TAppContext> =
|
|
104
|
-
createDeleteRoute as CreateWithoutBodyRoute<"DELETE", TAppContext>;
|
|
105
|
-
options: CreateWithoutBodyRoute<"OPTIONS", TAppContext> =
|
|
106
|
-
createOptionsRoute as CreateWithoutBodyRoute<"OPTIONS", TAppContext>;
|
|
107
|
-
head: CreateWithoutBodyRoute<"HEAD", TAppContext> = createHeadRoute as CreateWithoutBodyRoute<
|
|
108
|
-
"HEAD",
|
|
109
|
-
TAppContext
|
|
110
|
-
>;
|
|
111
|
-
any: CreateAnyRoute<TAppContext> = createAnyRoute as CreateAnyRoute<TAppContext>;
|
|
112
|
-
all: CreateAllRoute<TAppContext> = createAllRoute as CreateAllRoute<TAppContext>;
|
|
113
|
-
|
|
114
|
-
middleware<const Layout extends LayoutId>(
|
|
115
|
-
layout: Layout,
|
|
116
|
-
): MiddlewareBuilder<Layout, readonly [], TAppContext> {
|
|
117
|
-
return createMiddleware(layout) as MiddlewareBuilder<Layout, readonly [], TAppContext>;
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
defineHandler<TQuery = unknown, TParams = unknown, TBody = unknown>(options?: {
|
|
121
|
-
query?: Schema<TQuery>;
|
|
122
|
-
params?: Schema<TParams>;
|
|
123
|
-
body?: Schema<TBody>;
|
|
124
|
-
}): HandlerBuilder<
|
|
125
|
-
readonly [],
|
|
126
|
-
{ query: TQuery; params: TParams; body: TBody },
|
|
127
|
-
{},
|
|
128
|
-
TAppContext
|
|
129
|
-
> {
|
|
130
|
-
return options === undefined
|
|
131
|
-
? defineHandler<TAppContext>()
|
|
132
|
-
: defineHandler<TAppContext>(options);
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
defineMiddleware: DefineMiddlewareFn<TAppContext> =
|
|
136
|
-
defineMiddleware as DefineMiddlewareFn<TAppContext>;
|
|
137
|
-
|
|
138
68
|
create<const TManifest extends RouteManifestShape>(
|
|
139
69
|
manifest: TManifest,
|
|
140
70
|
runtimeOptions?: { basePath?: string },
|
|
@@ -209,6 +139,6 @@ export class TaserRouter<
|
|
|
209
139
|
|
|
210
140
|
export function createTaserApp(
|
|
211
141
|
options: CreateTaserAppOptions = {},
|
|
212
|
-
): TaserRouter<
|
|
213
|
-
return new TaserRouter<
|
|
142
|
+
): TaserRouter<EmptyAppContext, false> {
|
|
143
|
+
return new TaserRouter<EmptyAppContext, false>(options);
|
|
214
144
|
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import type { AppContext, LayoutBuilder } from "../types/index.js";
|
|
2
|
+
import {
|
|
3
|
+
createAllRoute,
|
|
4
|
+
createAnyRoute,
|
|
5
|
+
createDeleteRoute,
|
|
6
|
+
createGetRoute,
|
|
7
|
+
createHeadRoute,
|
|
8
|
+
createOptionsRoute,
|
|
9
|
+
createPatchRoute,
|
|
10
|
+
createPostRoute,
|
|
11
|
+
createPutRoute,
|
|
12
|
+
type CreateAllRoute,
|
|
13
|
+
type CreateAnyRoute,
|
|
14
|
+
type CreateWithBodyRoute,
|
|
15
|
+
type CreateWithoutBodyRoute,
|
|
16
|
+
} from "./factories.js";
|
|
17
|
+
import { createMiddleware } from "./middleware.js";
|
|
18
|
+
import { middleware as createMiddlewareFn, type MiddlewareFn } from "../define/middleware.js";
|
|
19
|
+
|
|
20
|
+
export const get: CreateWithoutBodyRoute<"GET", AppContext> =
|
|
21
|
+
createGetRoute as CreateWithoutBodyRoute<"GET", AppContext>;
|
|
22
|
+
export const post: CreateWithBodyRoute<"POST", AppContext> = createPostRoute as CreateWithBodyRoute<
|
|
23
|
+
"POST",
|
|
24
|
+
AppContext
|
|
25
|
+
>;
|
|
26
|
+
export const put: CreateWithBodyRoute<"PUT", AppContext> = createPutRoute as CreateWithBodyRoute<
|
|
27
|
+
"PUT",
|
|
28
|
+
AppContext
|
|
29
|
+
>;
|
|
30
|
+
export const patch: CreateWithBodyRoute<"PATCH", AppContext> =
|
|
31
|
+
createPatchRoute as CreateWithBodyRoute<"PATCH", AppContext>;
|
|
32
|
+
export const del: CreateWithoutBodyRoute<"DELETE", AppContext> =
|
|
33
|
+
createDeleteRoute as CreateWithoutBodyRoute<"DELETE", AppContext>;
|
|
34
|
+
export const options: CreateWithoutBodyRoute<"OPTIONS", AppContext> =
|
|
35
|
+
createOptionsRoute as CreateWithoutBodyRoute<"OPTIONS", AppContext>;
|
|
36
|
+
export const head: CreateWithoutBodyRoute<"HEAD", AppContext> =
|
|
37
|
+
createHeadRoute as CreateWithoutBodyRoute<"HEAD", AppContext>;
|
|
38
|
+
export const any: CreateAnyRoute<AppContext> = createAnyRoute as CreateAnyRoute<AppContext>;
|
|
39
|
+
export const all: CreateAllRoute<AppContext> = createAllRoute as CreateAllRoute<AppContext>;
|
|
40
|
+
|
|
41
|
+
export const layout: LayoutBuilder<AppContext> = createMiddleware as LayoutBuilder<AppContext>;
|
|
42
|
+
export const middleware: MiddlewareFn<AppContext> = createMiddlewareFn as MiddlewareFn<AppContext>;
|
|
43
|
+
|
|
44
|
+
export type TaserNamespace<TAppContext extends Record<string, unknown> = AppContext> = {
|
|
45
|
+
readonly get: CreateWithoutBodyRoute<"GET", TAppContext>;
|
|
46
|
+
readonly post: CreateWithBodyRoute<"POST", TAppContext>;
|
|
47
|
+
readonly put: CreateWithBodyRoute<"PUT", TAppContext>;
|
|
48
|
+
readonly patch: CreateWithBodyRoute<"PATCH", TAppContext>;
|
|
49
|
+
readonly delete: CreateWithoutBodyRoute<"DELETE", TAppContext>;
|
|
50
|
+
readonly options: CreateWithoutBodyRoute<"OPTIONS", TAppContext>;
|
|
51
|
+
readonly head: CreateWithoutBodyRoute<"HEAD", TAppContext>;
|
|
52
|
+
readonly any: CreateAnyRoute<TAppContext>;
|
|
53
|
+
readonly all: CreateAllRoute<TAppContext>;
|
|
54
|
+
readonly layout: LayoutBuilder<TAppContext>;
|
|
55
|
+
readonly middleware: MiddlewareFn<TAppContext>;
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
export const t: TaserNamespace<AppContext> = {
|
|
59
|
+
get,
|
|
60
|
+
post,
|
|
61
|
+
put,
|
|
62
|
+
patch,
|
|
63
|
+
delete: del,
|
|
64
|
+
options,
|
|
65
|
+
head,
|
|
66
|
+
any,
|
|
67
|
+
all,
|
|
68
|
+
layout,
|
|
69
|
+
middleware,
|
|
70
|
+
};
|
package/src/define/middleware.ts
CHANGED
|
@@ -1,281 +1,205 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
import type { ReturnsMap } from "../types/returns.js";
|
|
1
|
+
import { createMiddlewareUnitBuilder } from "../builder/middleware-unit.js";
|
|
4
2
|
import type {
|
|
5
|
-
AppContext,
|
|
6
3
|
DefineMiddlewareResult,
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
ExtractState,
|
|
5
|
+
IsUnknown,
|
|
6
|
+
MiddlewareUnitBuilder,
|
|
9
7
|
NextFn,
|
|
10
8
|
StandaloneMiddlewareContext,
|
|
11
9
|
} from "../types/units.js";
|
|
12
10
|
import type {
|
|
11
|
+
AppContext,
|
|
13
12
|
LayoutId,
|
|
14
13
|
ResolveLayoutMiddlewaresState,
|
|
15
14
|
ResolveLayoutsState,
|
|
16
15
|
} from "../types/index.js";
|
|
17
|
-
import type { Schema } from "../types/schema.js";
|
|
18
|
-
|
|
19
|
-
export type HonoMiddlewareHandler = Parameters<typeof createTaserCompatHandler>[0];
|
|
20
|
-
|
|
21
|
-
export type HonoMiddlewareUnit = MiddlewareUnit<
|
|
22
|
-
MiddlewareReturnFromParts<unknown, unknown, unknown, {}>,
|
|
23
|
-
{},
|
|
24
|
-
null,
|
|
25
|
-
{}
|
|
26
|
-
>;
|
|
27
16
|
|
|
28
|
-
export
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
TQuery = unknown,
|
|
56
|
-
TParams = unknown,
|
|
57
|
-
TBody = unknown,
|
|
58
|
-
TReturns extends ReturnsMap = {},
|
|
59
|
-
TQueryIn = unknown,
|
|
60
|
-
TParamsIn = unknown,
|
|
61
|
-
TBodyIn = unknown,
|
|
62
|
-
TAppContext extends Record<string, unknown> = AppContext,
|
|
63
|
-
R = unknown,
|
|
64
|
-
> = {
|
|
65
|
-
query?: Schema<TQuery, TQueryIn>;
|
|
66
|
-
params?: Schema<TParams, TParamsIn>;
|
|
67
|
-
body?: Schema<TBody, TBodyIn>;
|
|
68
|
-
returns?: TReturns;
|
|
69
|
-
handler: (
|
|
70
|
-
ctx: StandaloneMiddlewareContext<
|
|
71
|
-
TQuery,
|
|
72
|
-
TParams,
|
|
73
|
-
TBody,
|
|
74
|
-
TAppContext,
|
|
75
|
-
ResolveLayoutMiddlewaresState<Layout> & TRequires
|
|
76
|
-
>,
|
|
77
|
-
next: NextFn<NoInfer<TState>>,
|
|
78
|
-
) => Awaitable<R>;
|
|
79
|
-
};
|
|
17
|
+
export interface MiddlewareFn<TAppContext extends Record<string, unknown> = AppContext> {
|
|
18
|
+
/**
|
|
19
|
+
* Constructs a fluent unscoped middleware builder, with optional explicit State generic.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```ts
|
|
23
|
+
* const auth = middleware<{ user: string }>()
|
|
24
|
+
* .query(z.object({ token: z.string() }))
|
|
25
|
+
* .body("form", z.object({ file: z.instanceof(File) }))
|
|
26
|
+
* .returns({ 401: z.string() })
|
|
27
|
+
* .handler(async (ctx, next) => next({ user: "alice" }));
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
<TState = unknown>(): MiddlewareUnitBuilder<
|
|
31
|
+
unknown,
|
|
32
|
+
unknown,
|
|
33
|
+
unknown,
|
|
34
|
+
{},
|
|
35
|
+
null,
|
|
36
|
+
{},
|
|
37
|
+
TAppContext,
|
|
38
|
+
{},
|
|
39
|
+
unknown,
|
|
40
|
+
unknown,
|
|
41
|
+
unknown,
|
|
42
|
+
TState
|
|
43
|
+
>;
|
|
80
44
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
ctx: StandaloneMiddlewareContext<
|
|
101
|
-
TQuery,
|
|
102
|
-
TParams,
|
|
103
|
-
TBody,
|
|
104
|
-
TAppContext,
|
|
105
|
-
ResolveLayoutsState<Layouts> & TRequires
|
|
106
|
-
>,
|
|
107
|
-
next: NextFn<NoInfer<TState>>,
|
|
108
|
-
) => Awaitable<R>;
|
|
109
|
-
};
|
|
45
|
+
/**
|
|
46
|
+
* Constructs a fluent middleware builder scoped to a single layout branch, with optional explicit State generic.
|
|
47
|
+
*/
|
|
48
|
+
<const Layout extends LayoutId, TState = unknown>(
|
|
49
|
+
layout: Layout,
|
|
50
|
+
): MiddlewareUnitBuilder<
|
|
51
|
+
unknown,
|
|
52
|
+
unknown,
|
|
53
|
+
unknown,
|
|
54
|
+
{},
|
|
55
|
+
Layout,
|
|
56
|
+
{},
|
|
57
|
+
TAppContext,
|
|
58
|
+
ResolveLayoutMiddlewaresState<Layout>,
|
|
59
|
+
unknown,
|
|
60
|
+
unknown,
|
|
61
|
+
unknown,
|
|
62
|
+
TState
|
|
63
|
+
>;
|
|
110
64
|
|
|
111
|
-
|
|
112
|
-
|
|
65
|
+
/**
|
|
66
|
+
* Constructs a fluent middleware builder scoped to multiple layout branches (branch union), with optional explicit State generic.
|
|
67
|
+
*/
|
|
68
|
+
<const Layouts extends readonly [LayoutId, ...LayoutId[]], TState = unknown>(
|
|
69
|
+
layouts: Layouts,
|
|
70
|
+
): MiddlewareUnitBuilder<
|
|
71
|
+
unknown,
|
|
72
|
+
unknown,
|
|
73
|
+
unknown,
|
|
74
|
+
{},
|
|
75
|
+
Layouts,
|
|
76
|
+
{},
|
|
77
|
+
TAppContext,
|
|
78
|
+
ResolveLayoutsState<Layouts>,
|
|
79
|
+
unknown,
|
|
80
|
+
unknown,
|
|
81
|
+
unknown,
|
|
82
|
+
TState
|
|
83
|
+
>;
|
|
113
84
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
TQuery = unknown,
|
|
119
|
-
TParams = unknown,
|
|
120
|
-
TBody = unknown,
|
|
121
|
-
TReturns extends ReturnsMap = {},
|
|
122
|
-
TQueryIn = unknown,
|
|
123
|
-
TParamsIn = unknown,
|
|
124
|
-
TBodyIn = unknown,
|
|
125
|
-
R = unknown,
|
|
126
|
-
>(
|
|
85
|
+
/**
|
|
86
|
+
* Defines a standalone middleware scoped to a single layout branch using a short function signature.
|
|
87
|
+
*/
|
|
88
|
+
<const Layout extends LayoutId, TState = unknown, TRequires = {}, R = unknown>(
|
|
127
89
|
layout: Layout,
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
TBodyIn,
|
|
139
|
-
TAppContext,
|
|
140
|
-
R
|
|
141
|
-
>,
|
|
90
|
+
fn: (
|
|
91
|
+
ctx: StandaloneMiddlewareContext<
|
|
92
|
+
unknown,
|
|
93
|
+
unknown,
|
|
94
|
+
unknown,
|
|
95
|
+
TAppContext,
|
|
96
|
+
ResolveLayoutMiddlewaresState<Layout> & TRequires
|
|
97
|
+
>,
|
|
98
|
+
next: NextFn<NoInfer<TState>>,
|
|
99
|
+
) => R,
|
|
142
100
|
): DefineMiddlewareResult<
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
TState,
|
|
101
|
+
unknown,
|
|
102
|
+
unknown,
|
|
103
|
+
unknown,
|
|
104
|
+
IsUnknown<TState> extends true ? ExtractState<R> : TState,
|
|
147
105
|
R,
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
106
|
+
unknown,
|
|
107
|
+
unknown,
|
|
108
|
+
unknown,
|
|
109
|
+
{},
|
|
152
110
|
Layout,
|
|
153
111
|
TRequires
|
|
154
112
|
>;
|
|
155
113
|
|
|
114
|
+
/**
|
|
115
|
+
* Defines a standalone middleware scoped to multiple layout branches using a short function signature.
|
|
116
|
+
*/
|
|
156
117
|
<
|
|
157
118
|
const Layouts extends readonly [LayoutId, ...LayoutId[]],
|
|
158
119
|
TState = unknown,
|
|
159
120
|
TRequires = {},
|
|
160
|
-
TQuery = unknown,
|
|
161
|
-
TParams = unknown,
|
|
162
|
-
TBody = unknown,
|
|
163
|
-
TReturns extends ReturnsMap = {},
|
|
164
|
-
TQueryIn = unknown,
|
|
165
|
-
TParamsIn = unknown,
|
|
166
|
-
TBodyIn = unknown,
|
|
167
121
|
R = unknown,
|
|
168
122
|
>(
|
|
169
123
|
layouts: Layouts,
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
TBodyIn,
|
|
181
|
-
TAppContext,
|
|
182
|
-
R
|
|
183
|
-
>,
|
|
124
|
+
fn: (
|
|
125
|
+
ctx: StandaloneMiddlewareContext<
|
|
126
|
+
unknown,
|
|
127
|
+
unknown,
|
|
128
|
+
unknown,
|
|
129
|
+
TAppContext,
|
|
130
|
+
ResolveLayoutsState<Layouts> & TRequires
|
|
131
|
+
>,
|
|
132
|
+
next: NextFn<NoInfer<TState>>,
|
|
133
|
+
) => R,
|
|
184
134
|
): DefineMiddlewareResult<
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
TState,
|
|
135
|
+
unknown,
|
|
136
|
+
unknown,
|
|
137
|
+
unknown,
|
|
138
|
+
IsUnknown<TState> extends true ? ExtractState<R> : TState,
|
|
189
139
|
R,
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
140
|
+
unknown,
|
|
141
|
+
unknown,
|
|
142
|
+
unknown,
|
|
143
|
+
{},
|
|
194
144
|
Layouts,
|
|
195
145
|
TRequires
|
|
196
146
|
>;
|
|
197
147
|
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
TState
|
|
212
|
-
|
|
213
|
-
TQuery,
|
|
214
|
-
TParams,
|
|
215
|
-
TBody,
|
|
216
|
-
TReturns,
|
|
217
|
-
TQueryIn,
|
|
218
|
-
TParamsIn,
|
|
219
|
-
TBodyIn,
|
|
220
|
-
TAppContext,
|
|
221
|
-
R
|
|
222
|
-
>,
|
|
148
|
+
/**
|
|
149
|
+
* Defines a standalone, unscoped middleware using a short function signature.
|
|
150
|
+
*
|
|
151
|
+
* @example
|
|
152
|
+
* ```ts
|
|
153
|
+
* const auth = middleware((ctx, next) => {
|
|
154
|
+
* return next({ user: "alice" });
|
|
155
|
+
* });
|
|
156
|
+
* ```
|
|
157
|
+
*/
|
|
158
|
+
<TState = unknown, TRequires = {}, R = unknown>(
|
|
159
|
+
fn: (
|
|
160
|
+
ctx: StandaloneMiddlewareContext<unknown, unknown, unknown, TAppContext, TRequires>,
|
|
161
|
+
next: NextFn<NoInfer<TState>>,
|
|
162
|
+
) => R,
|
|
223
163
|
): DefineMiddlewareResult<
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
TState,
|
|
164
|
+
unknown,
|
|
165
|
+
unknown,
|
|
166
|
+
unknown,
|
|
167
|
+
IsUnknown<TState> extends true ? ExtractState<R> : TState,
|
|
228
168
|
R,
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
169
|
+
unknown,
|
|
170
|
+
unknown,
|
|
171
|
+
unknown,
|
|
172
|
+
{},
|
|
233
173
|
null,
|
|
234
174
|
TRequires
|
|
235
175
|
>;
|
|
236
176
|
}
|
|
237
177
|
|
|
238
|
-
export const
|
|
239
|
-
first
|
|
178
|
+
export const middleware: MiddlewareFn<AppContext> = function middleware(
|
|
179
|
+
first?: any,
|
|
240
180
|
second?: any,
|
|
241
181
|
): any {
|
|
182
|
+
if (first === undefined) {
|
|
183
|
+
return createMiddlewareUnitBuilder();
|
|
184
|
+
}
|
|
185
|
+
|
|
242
186
|
if (typeof first === "string" || Array.isArray(first)) {
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
}
|
|
250
|
-
return
|
|
187
|
+
if (typeof second === "function") {
|
|
188
|
+
return {
|
|
189
|
+
handler: second,
|
|
190
|
+
__middlewareAcc: undefined as unknown,
|
|
191
|
+
__requiredLayouts: first,
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
return createMiddlewareUnitBuilder(first);
|
|
251
195
|
}
|
|
252
196
|
|
|
253
197
|
if (typeof first === "function") {
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
});
|
|
198
|
+
return {
|
|
199
|
+
handler: first,
|
|
200
|
+
__middlewareAcc: undefined as unknown,
|
|
201
|
+
};
|
|
259
202
|
}
|
|
260
203
|
|
|
261
|
-
|
|
262
|
-
any,
|
|
263
|
-
any,
|
|
264
|
-
any,
|
|
265
|
-
any,
|
|
266
|
-
any,
|
|
267
|
-
any,
|
|
268
|
-
any,
|
|
269
|
-
any,
|
|
270
|
-
any,
|
|
271
|
-
any,
|
|
272
|
-
any
|
|
273
|
-
>;
|
|
274
|
-
const unit = {
|
|
275
|
-
...options,
|
|
276
|
-
__middlewareAcc: undefined as unknown,
|
|
277
|
-
...(options.returns ? { __returns: options.returns } : {}),
|
|
278
|
-
};
|
|
279
|
-
|
|
280
|
-
return unit;
|
|
204
|
+
return createMiddlewareUnitBuilder();
|
|
281
205
|
};
|
package/src/index.ts
CHANGED
|
@@ -1,15 +1,25 @@
|
|
|
1
|
-
export
|
|
1
|
+
export interface RouterRegister {}
|
|
2
2
|
export type {
|
|
3
|
+
AppContext,
|
|
4
|
+
EmptyAppContext,
|
|
3
5
|
HttpMethod,
|
|
4
6
|
InferInput,
|
|
5
7
|
InferOutput,
|
|
6
8
|
InferRouteContext,
|
|
7
9
|
InferRouteInput,
|
|
10
|
+
InferRouteInputFromPath,
|
|
8
11
|
InferRouteOutput,
|
|
12
|
+
LayoutBuilder,
|
|
13
|
+
LayoutId,
|
|
14
|
+
LayoutTree,
|
|
9
15
|
Method,
|
|
16
|
+
MiddlewareBuilder,
|
|
10
17
|
MiddlewareDefinition,
|
|
18
|
+
MiddlewareUnit,
|
|
19
|
+
MiddlewareUnitBuilder,
|
|
11
20
|
PathParams,
|
|
12
21
|
ReturnsMap,
|
|
22
|
+
RouteByPathMethod,
|
|
13
23
|
RouteDefinition,
|
|
14
24
|
RouteExport,
|
|
15
25
|
RoutePath,
|
|
@@ -29,10 +39,26 @@ export type {
|
|
|
29
39
|
export { ValidationError, validationErrorSchema } from "@taserjs/router-utils";
|
|
30
40
|
export type { ResponseValidationFailureHandler, SuccessStatusCode } from "@taserjs/router-utils";
|
|
31
41
|
|
|
42
|
+
export {
|
|
43
|
+
all,
|
|
44
|
+
any,
|
|
45
|
+
del,
|
|
46
|
+
get,
|
|
47
|
+
head,
|
|
48
|
+
layout,
|
|
49
|
+
middleware,
|
|
50
|
+
options,
|
|
51
|
+
patch,
|
|
52
|
+
post,
|
|
53
|
+
put,
|
|
54
|
+
t,
|
|
55
|
+
type TaserNamespace,
|
|
56
|
+
} from "./builder/standalone.js";
|
|
57
|
+
|
|
32
58
|
export { createTaserApp, TaserRouter } from "./builder/router.js";
|
|
33
59
|
export { TaserApp } from "./builder/app.js";
|
|
34
60
|
export { createContext } from "./context/create-context.js";
|
|
35
|
-
export {
|
|
36
|
-
export {
|
|
61
|
+
export { honoMw } from "./middleware/hono-mw.js";
|
|
62
|
+
export type { MiddlewareFn } from "./define/middleware.js";
|
|
37
63
|
|
|
38
64
|
export type { TaserCookieJar, TaserHeaders } from "@taserjs/router-core";
|