@taserjs/router 0.0.2 → 0.0.4
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 +2 -0
- package/dist/cjs/constants.cjs.map +1 -1
- package/dist/cjs/create-context.cjs.map +1 -1
- package/dist/cjs/define/handler.cjs.map +1 -1
- package/dist/cjs/define/middleware.cjs +18 -27
- package/dist/cjs/define/middleware.cjs.map +1 -1
- package/dist/cjs/define/middleware.d.cts +27 -79
- package/dist/cjs/define/validators.cjs.map +1 -1
- package/dist/cjs/factories.cjs.map +1 -1
- package/dist/cjs/factories.d.cts +2 -2
- package/dist/cjs/index.cjs +1 -2
- package/dist/cjs/index.d.cts +1 -1
- package/dist/cjs/middleware/body-limit.cjs +2 -2
- package/dist/cjs/middleware/body-limit.cjs.map +1 -1
- package/dist/cjs/middleware/compress.cjs +2 -2
- package/dist/cjs/middleware/compress.cjs.map +1 -1
- package/dist/cjs/middleware/cors.cjs +2 -2
- package/dist/cjs/middleware/cors.cjs.map +1 -1
- package/dist/cjs/middleware/csrf.cjs +2 -2
- package/dist/cjs/middleware/csrf.cjs.map +1 -1
- package/dist/cjs/middleware/etag.cjs +2 -2
- package/dist/cjs/middleware/etag.cjs.map +1 -1
- package/dist/cjs/middleware/jwk.cjs +11 -4
- package/dist/cjs/middleware/jwk.cjs.map +1 -1
- package/dist/cjs/middleware/jwk.d.cts +4 -5
- package/dist/cjs/middleware/jwt.cjs +11 -5
- package/dist/cjs/middleware/jwt.cjs.map +1 -1
- package/dist/cjs/middleware/jwt.d.cts +7 -5
- package/dist/cjs/middleware/secure-headers.cjs +2 -2
- package/dist/cjs/middleware/secure-headers.cjs.map +1 -1
- package/dist/cjs/middleware/timing.cjs +2 -2
- package/dist/cjs/middleware/timing.cjs.map +1 -1
- package/dist/cjs/middleware/wrap-hono.cjs +9 -0
- package/dist/cjs/middleware/wrap-hono.cjs.map +1 -0
- package/dist/cjs/middleware/wrap-hono.d.cts +3 -0
- package/dist/cjs/middleware.cjs.map +1 -1
- package/dist/cjs/reply.d.cts +1 -1
- package/dist/cjs/route.cjs.map +1 -1
- package/dist/cjs/route.d.cts +1 -1
- package/dist/cjs/stream.d.cts +1 -1
- package/dist/cjs/taser-app.cjs +0 -6
- package/dist/cjs/taser-app.cjs.map +1 -1
- package/dist/cjs/taser-app.d.cts +0 -3
- package/dist/cjs/taser-router.cjs +9 -10
- package/dist/cjs/taser-router.cjs.map +1 -1
- package/dist/cjs/taser-router.d.cts +9 -11
- package/dist/cjs/types/app.d.cts +3 -2
- package/dist/cjs/types/index.d.cts +94 -143
- package/dist/cjs/types/type-utils.d.cts +8 -10
- package/dist/cjs/types/units.cjs.map +1 -1
- package/dist/cjs/types/units.d.cts +32 -27
- package/dist/esm/constants.js.map +1 -1
- package/dist/esm/create-context.js.map +1 -1
- package/dist/esm/define/handler.js.map +1 -1
- package/dist/esm/define/middleware.d.ts +27 -79
- package/dist/esm/define/middleware.js +18 -27
- package/dist/esm/define/middleware.js.map +1 -1
- package/dist/esm/define/validators.js.map +1 -1
- package/dist/esm/factories.d.ts +2 -2
- package/dist/esm/factories.js.map +1 -1
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.js +3 -3
- package/dist/esm/middleware/body-limit.js +1 -1
- package/dist/esm/middleware/body-limit.js.map +1 -1
- package/dist/esm/middleware/compress.js +1 -1
- package/dist/esm/middleware/compress.js.map +1 -1
- package/dist/esm/middleware/cors.js +1 -1
- package/dist/esm/middleware/cors.js.map +1 -1
- package/dist/esm/middleware/csrf.js +1 -1
- package/dist/esm/middleware/csrf.js.map +1 -1
- package/dist/esm/middleware/etag.js +1 -1
- package/dist/esm/middleware/etag.js.map +1 -1
- package/dist/esm/middleware/jwk.d.ts +4 -5
- package/dist/esm/middleware/jwk.js +11 -4
- package/dist/esm/middleware/jwk.js.map +1 -1
- package/dist/esm/middleware/jwt.d.ts +7 -5
- package/dist/esm/middleware/jwt.js +11 -5
- package/dist/esm/middleware/jwt.js.map +1 -1
- package/dist/esm/middleware/secure-headers.js +1 -1
- package/dist/esm/middleware/secure-headers.js.map +1 -1
- package/dist/esm/middleware/timing.js +1 -1
- package/dist/esm/middleware/timing.js.map +1 -1
- package/dist/esm/middleware/wrap-hono.d.ts +3 -0
- package/dist/esm/middleware/wrap-hono.js +9 -0
- package/dist/esm/middleware/wrap-hono.js.map +1 -0
- package/dist/esm/middleware.js.map +1 -1
- package/dist/esm/reply.d.ts +1 -1
- package/dist/esm/route.d.ts +1 -1
- package/dist/esm/route.js.map +1 -1
- package/dist/esm/stream.d.ts +1 -1
- package/dist/esm/taser-app.d.ts +0 -3
- package/dist/esm/taser-app.js +1 -6
- package/dist/esm/taser-app.js.map +1 -1
- package/dist/esm/taser-router.d.ts +9 -11
- package/dist/esm/taser-router.js +7 -8
- package/dist/esm/taser-router.js.map +1 -1
- package/dist/esm/types/app.d.ts +3 -2
- package/dist/esm/types/index.d.ts +94 -143
- package/dist/esm/types/type-utils.d.ts +8 -10
- package/dist/esm/types/units.d.ts +32 -27
- package/dist/esm/types/units.js.map +1 -1
- package/package.json +17 -17
- package/src/constants.ts +6 -6
- package/src/create-context.ts +8 -8
- package/src/define/handler.ts +24 -34
- package/src/define/middleware.ts +222 -222
- package/src/define/validators.ts +10 -10
- package/src/factories.ts +63 -61
- package/src/index.ts +12 -12
- package/src/middleware/body-limit.ts +5 -5
- package/src/middleware/compress.ts +5 -5
- package/src/middleware/cors.ts +5 -5
- package/src/middleware/csrf.ts +5 -5
- package/src/middleware/etag.ts +5 -5
- package/src/middleware/jwk.ts +33 -26
- package/src/middleware/jwt.ts +26 -10
- package/src/middleware/secure-headers.ts +5 -5
- package/src/middleware/timing.ts +5 -5
- package/src/middleware/wrap-hono.ts +12 -0
- package/src/middleware.ts +7 -7
- package/src/reply.ts +2 -6
- package/src/route.ts +45 -48
- package/src/stream.ts +1 -7
- package/src/taser-app.ts +13 -18
- package/src/taser-router.ts +103 -98
- package/src/types/app.ts +33 -35
- package/src/types/index.ts +403 -731
- package/src/types/returns.ts +92 -97
- package/src/types/schema.ts +8 -9
- package/src/types/type-utils.ts +42 -45
- package/src/types/units.ts +140 -104
- package/dist/cjs/middleware/auth.cjs +0 -34
- package/dist/cjs/middleware/auth.cjs.map +0 -1
- package/dist/cjs/middleware/auth.d.cts +0 -9
- package/dist/esm/middleware/auth.d.ts +0 -9
- package/dist/esm/middleware/auth.js +0 -33
- package/dist/esm/middleware/auth.js.map +0 -1
- package/src/middleware/auth.ts +0 -51
package/package.json
CHANGED
|
@@ -1,7 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@taserjs/router",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.4",
|
|
4
4
|
"description": "Type-safe Node.js router with runtime validation and middleware",
|
|
5
|
+
"license": "ISC",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "git+https://github.com/taserjs/taserjs.git",
|
|
9
|
+
"directory": "packages/router"
|
|
10
|
+
},
|
|
11
|
+
"files": [
|
|
12
|
+
"dist",
|
|
13
|
+
"src"
|
|
14
|
+
],
|
|
5
15
|
"type": "module",
|
|
6
16
|
"sideEffects": false,
|
|
7
17
|
"main": "./dist/cjs/index.cjs",
|
|
@@ -130,15 +140,15 @@
|
|
|
130
140
|
},
|
|
131
141
|
"./package.json": "./package.json"
|
|
132
142
|
},
|
|
133
|
-
"
|
|
134
|
-
"
|
|
135
|
-
"
|
|
136
|
-
|
|
143
|
+
"publishConfig": {
|
|
144
|
+
"access": "public",
|
|
145
|
+
"registry": "https://registry.npmjs.org"
|
|
146
|
+
},
|
|
137
147
|
"dependencies": {
|
|
138
148
|
"@standard-schema/spec": "^1.1.0",
|
|
139
149
|
"hono": "^4.10.3",
|
|
140
|
-
"@taserjs/router-core": "0.0.
|
|
141
|
-
"@taserjs/router-utils": "0.0.
|
|
150
|
+
"@taserjs/router-core": "0.0.4",
|
|
151
|
+
"@taserjs/router-utils": "0.0.4"
|
|
142
152
|
},
|
|
143
153
|
"devDependencies": {
|
|
144
154
|
"@tanstack/vite-config": "^0.6.0",
|
|
@@ -150,16 +160,6 @@
|
|
|
150
160
|
"engines": {
|
|
151
161
|
"node": ">=20.19"
|
|
152
162
|
},
|
|
153
|
-
"license": "ISC",
|
|
154
|
-
"repository": {
|
|
155
|
-
"type": "git",
|
|
156
|
-
"url": "git+https://github.com/taserjs/taserjs.git",
|
|
157
|
-
"directory": "packages/router"
|
|
158
|
-
},
|
|
159
|
-
"publishConfig": {
|
|
160
|
-
"access": "public",
|
|
161
|
-
"registry": "https://registry.npmjs.org"
|
|
162
|
-
},
|
|
163
163
|
"scripts": {
|
|
164
164
|
"clean": "rimraf dist",
|
|
165
165
|
"build": "vite build && publint --strict",
|
package/src/constants.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/** Input schema keys validated by middleware and route handlers. Headers/cookies are parsed only. */
|
|
2
|
-
export const SCHEMA_KEYS = [
|
|
2
|
+
export const SCHEMA_KEYS = ["query", "params", "body"] as const;
|
|
3
3
|
|
|
4
|
-
export type SchemaKey = (typeof SCHEMA_KEYS)[number]
|
|
4
|
+
export type SchemaKey = (typeof SCHEMA_KEYS)[number];
|
|
5
5
|
|
|
6
6
|
export const HANDLER_SCHEMA_KEY_MAP = {
|
|
7
|
-
query:
|
|
8
|
-
params:
|
|
9
|
-
body:
|
|
10
|
-
} as const satisfies Record<SchemaKey, string
|
|
7
|
+
query: "handlerQuery",
|
|
8
|
+
params: "handlerParams",
|
|
9
|
+
body: "handlerBody",
|
|
10
|
+
} as const satisfies Record<SchemaKey, string>;
|
package/src/create-context.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import type { ReservedContextKey } from
|
|
1
|
+
import type { ReservedContextKey } from "@taserjs/router-core";
|
|
2
2
|
|
|
3
|
-
import type { ContextDefinition } from
|
|
3
|
+
import type { ContextDefinition } from "./types/app.js";
|
|
4
4
|
|
|
5
|
-
type NoReservedKeysConstraint<
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
type NoReservedKeysConstraint<
|
|
6
|
+
TBoot extends Record<string, unknown>,
|
|
7
|
+
TReq extends Record<string, unknown>,
|
|
8
|
+
> = Extract<keyof TBoot | keyof TReq, ReservedContextKey> extends never ? unknown : never;
|
|
9
9
|
|
|
10
10
|
export function createContext<
|
|
11
11
|
TBoot extends Record<string, unknown> = Record<string, never>,
|
|
@@ -13,7 +13,7 @@ export function createContext<
|
|
|
13
13
|
>(
|
|
14
14
|
definition: ContextDefinition<TBoot, TReq> & NoReservedKeysConstraint<TBoot, TReq>,
|
|
15
15
|
): ContextDefinition<TBoot, TReq> {
|
|
16
|
-
return definition
|
|
16
|
+
return definition;
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
-
export type { ContextDefinition, InferAppContext } from
|
|
19
|
+
export type { ContextDefinition, InferAppContext } from "./types/app.js";
|
package/src/define/handler.ts
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import type { HandlerBuilder } from
|
|
1
|
+
import type { HandlerBuilder } from "../types/index.js";
|
|
2
2
|
import type {
|
|
3
3
|
AppContext,
|
|
4
4
|
HandlerUnit,
|
|
5
5
|
MiddlewareDefinition,
|
|
6
6
|
ReturnsMap,
|
|
7
7
|
ValidatorParts,
|
|
8
|
-
} from
|
|
9
|
-
import type { Schema } from
|
|
10
|
-
import { pickDefinedSchemas, type SchemaValidators } from
|
|
11
|
-
import { collectReturnsFromDefinitions } from
|
|
8
|
+
} from "../types/units.js";
|
|
9
|
+
import type { Schema } from "../types/schema.js";
|
|
10
|
+
import { pickDefinedSchemas, type SchemaValidators } from "./validators.js";
|
|
11
|
+
import { collectReturnsFromDefinitions } from "@taserjs/router-utils";
|
|
12
12
|
|
|
13
13
|
function createHandlerBuilder<TAppContext extends Record<string, unknown> = AppContext>(
|
|
14
14
|
validators: SchemaValidators,
|
|
@@ -17,56 +17,46 @@ function createHandlerBuilder<TAppContext extends Record<string, unknown> = AppC
|
|
|
17
17
|
): HandlerBuilder<readonly [], ValidatorParts, {}, TAppContext> {
|
|
18
18
|
const builder = {
|
|
19
19
|
returns(map: ReturnsMap) {
|
|
20
|
-
return createHandlerBuilder<TAppContext>(validators, middlewares, { ...returnsMap, ...map })
|
|
20
|
+
return createHandlerBuilder<TAppContext>(validators, middlewares, { ...returnsMap, ...map });
|
|
21
21
|
},
|
|
22
22
|
use(unitOrOptions: MiddlewareDefinition) {
|
|
23
|
-
middlewares.push(unitOrOptions)
|
|
24
|
-
return builder
|
|
23
|
+
middlewares.push(unitOrOptions);
|
|
24
|
+
return builder;
|
|
25
25
|
},
|
|
26
26
|
handler(fn: (ctx: unknown) => unknown) {
|
|
27
|
-
const mwReturns = collectReturnsFromDefinitions(middlewares)
|
|
28
|
-
const mergedReturns = { ...mwReturns, ...returnsMap }
|
|
27
|
+
const mwReturns = collectReturnsFromDefinitions(middlewares);
|
|
28
|
+
const mergedReturns = { ...mwReturns, ...returnsMap };
|
|
29
29
|
const unit = {
|
|
30
30
|
$Infer: { Output: undefined as unknown as Response },
|
|
31
31
|
middlewares: [...middlewares],
|
|
32
|
-
handler: fn as HandlerUnit<readonly [], ValidatorParts>[
|
|
32
|
+
handler: fn as HandlerUnit<readonly [], ValidatorParts>["handler"],
|
|
33
33
|
...pickDefinedSchemas(validators),
|
|
34
34
|
...(Object.keys(mergedReturns).length > 0 ? { returns: mergedReturns } : {}),
|
|
35
|
-
} as HandlerUnit<readonly [], ValidatorParts
|
|
36
|
-
return unit
|
|
35
|
+
} as HandlerUnit<readonly [], ValidatorParts>;
|
|
36
|
+
return unit;
|
|
37
37
|
},
|
|
38
|
-
}
|
|
38
|
+
};
|
|
39
39
|
|
|
40
|
-
return builder as unknown as HandlerBuilder<readonly [], ValidatorParts, {}, TAppContext
|
|
40
|
+
return builder as unknown as HandlerBuilder<readonly [], ValidatorParts, {}, TAppContext>;
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
-
export function defineHandler<
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
{},
|
|
47
|
-
TAppContext
|
|
48
|
-
>
|
|
43
|
+
export function defineHandler<
|
|
44
|
+
TAppContext extends Record<string, unknown> = AppContext,
|
|
45
|
+
>(): HandlerBuilder<readonly [], {}, {}, TAppContext>;
|
|
49
46
|
|
|
50
47
|
export function defineHandler<
|
|
51
48
|
TAppContext extends Record<string, unknown> = AppContext,
|
|
52
49
|
TQuery = unknown,
|
|
53
50
|
TParams = unknown,
|
|
54
51
|
TBody = unknown,
|
|
55
|
-
>(
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
},
|
|
61
|
-
): HandlerBuilder<
|
|
62
|
-
readonly [],
|
|
63
|
-
{ query: TQuery, params: TParams, body: TBody },
|
|
64
|
-
{},
|
|
65
|
-
TAppContext
|
|
66
|
-
>
|
|
52
|
+
>(options: {
|
|
53
|
+
query?: Schema<TQuery>;
|
|
54
|
+
params?: Schema<TParams>;
|
|
55
|
+
body?: Schema<TBody>;
|
|
56
|
+
}): HandlerBuilder<readonly [], { query: TQuery; params: TParams; body: TBody }, {}, TAppContext>;
|
|
67
57
|
|
|
68
58
|
export function defineHandler<TAppContext extends Record<string, unknown> = AppContext>(
|
|
69
59
|
options?: SchemaValidators,
|
|
70
60
|
): HandlerBuilder<readonly [], ValidatorParts, {}, TAppContext> {
|
|
71
|
-
return createHandlerBuilder<TAppContext>(options ?? {}, [], {})
|
|
61
|
+
return createHandlerBuilder<TAppContext>(options ?? {}, [], {});
|
|
72
62
|
}
|