@rexeus/typeweaver-server 0.6.0 → 0.6.2
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 +8 -9
- package/dist/lib/TypeweaverApp.ts +9 -5
- package/dist/lib/TypeweaverRouter.ts +2 -2
- package/package.json +5 -5
package/README.md
CHANGED
|
@@ -187,13 +187,12 @@ to provide it.
|
|
|
187
187
|
**Requiring upstream state** — declare dependencies:
|
|
188
188
|
|
|
189
189
|
```ts
|
|
190
|
-
const permissions = defineMiddleware<
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
});
|
|
190
|
+
const permissions = defineMiddleware<{ permissions: string[] }, { userId: string }>(
|
|
191
|
+
async (ctx, next) => {
|
|
192
|
+
const userId = ctx.state.get("userId"); // string — no cast, no undefined
|
|
193
|
+
return next({ permissions: await loadPermissions(userId) });
|
|
194
|
+
}
|
|
195
|
+
);
|
|
197
196
|
```
|
|
198
197
|
|
|
199
198
|
Registering `permissions` before `auth` produces a **compile-time error** because `userId` is not
|
|
@@ -206,7 +205,7 @@ const logger = defineMiddleware(async (ctx, next) => {
|
|
|
206
205
|
const start = Date.now();
|
|
207
206
|
const response = await next();
|
|
208
207
|
console.log(
|
|
209
|
-
`${ctx.request.method} ${ctx.request.path} -> ${response.statusCode} (${Date.now() - start}ms)
|
|
208
|
+
`${ctx.request.method} ${ctx.request.path} -> ${response.statusCode} (${Date.now() - start}ms)`
|
|
210
209
|
);
|
|
211
210
|
return response;
|
|
212
211
|
});
|
|
@@ -274,7 +273,7 @@ CORS always execute.
|
|
|
274
273
|
```ts
|
|
275
274
|
const app = new TypeweaverApp({
|
|
276
275
|
maxBodySize: 5 * 1024 * 1024, // 5 MB
|
|
277
|
-
onError:
|
|
276
|
+
onError: error => logger.error("Unhandled error", error),
|
|
278
277
|
});
|
|
279
278
|
```
|
|
280
279
|
|
|
@@ -116,14 +116,18 @@ export class TypeweaverApp<TState extends Record<string, unknown> = {}> {
|
|
|
116
116
|
* app.route("/api/v1", new TodoRouter({ requestHandlers: { ... } }));
|
|
117
117
|
* ```
|
|
118
118
|
*/
|
|
119
|
-
public route(
|
|
119
|
+
public route(
|
|
120
|
+
router: TypeweaverRouter<Record<string, RequestHandler<any, any, any>>>
|
|
121
|
+
): this;
|
|
120
122
|
public route(
|
|
121
123
|
prefix: string,
|
|
122
|
-
router: TypeweaverRouter<Record<string, RequestHandler
|
|
124
|
+
router: TypeweaverRouter<Record<string, RequestHandler<any, any, any>>>
|
|
123
125
|
): this;
|
|
124
126
|
public route(
|
|
125
|
-
prefixOrRouter:
|
|
126
|
-
|
|
127
|
+
prefixOrRouter:
|
|
128
|
+
| string
|
|
129
|
+
| TypeweaverRouter<Record<string, RequestHandler<any, any, any>>>,
|
|
130
|
+
router?: TypeweaverRouter<Record<string, RequestHandler<any, any, any>>>
|
|
127
131
|
): this {
|
|
128
132
|
if (typeof prefixOrRouter === "string") {
|
|
129
133
|
if (!router) {
|
|
@@ -304,7 +308,7 @@ export class TypeweaverApp<TState extends Record<string, unknown> = {}> {
|
|
|
304
308
|
}
|
|
305
309
|
|
|
306
310
|
private mountRouter(
|
|
307
|
-
router: TypeweaverRouter<Record<string, RequestHandler
|
|
311
|
+
router: TypeweaverRouter<Record<string, RequestHandler<any, any, any>>>,
|
|
308
312
|
prefix?: string
|
|
309
313
|
): this {
|
|
310
314
|
const normalizedPrefix = prefix?.replace(/\/+$/, "");
|
|
@@ -23,7 +23,7 @@ import type {
|
|
|
23
23
|
* @template RequestHandlers - Object type containing all handler methods for this router
|
|
24
24
|
*/
|
|
25
25
|
export type TypeweaverRouterOptions<
|
|
26
|
-
RequestHandlers extends Record<string, RequestHandler
|
|
26
|
+
RequestHandlers extends Record<string, RequestHandler<any, any, any>>,
|
|
27
27
|
> = {
|
|
28
28
|
/**
|
|
29
29
|
* Request handler methods for each operation.
|
|
@@ -81,7 +81,7 @@ export type TypeweaverRouterOptions<
|
|
|
81
81
|
* @template RequestHandlers - Object type containing typed handler methods
|
|
82
82
|
*/
|
|
83
83
|
export abstract class TypeweaverRouter<
|
|
84
|
-
RequestHandlers extends Record<string, RequestHandler
|
|
84
|
+
RequestHandlers extends Record<string, RequestHandler<any, any, any>>,
|
|
85
85
|
> {
|
|
86
86
|
protected readonly requestHandlers: RequestHandlers;
|
|
87
87
|
private readonly routes: RouteDefinition[] = [];
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rexeus/typeweaver-server",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.2",
|
|
4
4
|
"description": "Generates a lightweight, dependency-free server with built-in routing and middleware from your API definitions. Powered by Typeweaver.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -47,15 +47,15 @@
|
|
|
47
47
|
},
|
|
48
48
|
"homepage": "https://github.com/rexeus/typeweaver#readme",
|
|
49
49
|
"peerDependencies": {
|
|
50
|
-
"@rexeus/typeweaver-core": "^0.6.
|
|
51
|
-
"@rexeus/typeweaver-gen": "^0.6.
|
|
50
|
+
"@rexeus/typeweaver-core": "^0.6.2",
|
|
51
|
+
"@rexeus/typeweaver-gen": "^0.6.2"
|
|
52
52
|
},
|
|
53
53
|
"devDependencies": {
|
|
54
54
|
"get-port": "^7.1.0",
|
|
55
55
|
"test-utils": "file:../test-utils",
|
|
56
56
|
"tsx": "^4.21.0",
|
|
57
|
-
"@rexeus/typeweaver-core": "^0.6.
|
|
58
|
-
"@rexeus/typeweaver-gen": "^0.6.
|
|
57
|
+
"@rexeus/typeweaver-core": "^0.6.2",
|
|
58
|
+
"@rexeus/typeweaver-gen": "^0.6.2"
|
|
59
59
|
},
|
|
60
60
|
"dependencies": {
|
|
61
61
|
"case": "^1.6.3"
|