feat(TypedServer): Integrate SmartServe controller routing; add built-in routes controller and refactor TypedServer to use controllers and FileServer

This commit is contained in:
2025-12-02 20:47:11 +00:00
parent c17d6dac35
commit 27c96949a1
7 changed files with 299 additions and 212 deletions

View File

@@ -1,43 +1,34 @@
import * as plugins from '../plugins.js';
/**
* TypedRequest handler for type-safe RPC endpoint
* TypedRequest controller for type-safe RPC endpoint
*/
export class TypedRequestHandler {
@plugins.smartserve.Route('/typedrequest')
export class TypedRequestController {
private typedRouter: plugins.typedrequest.TypedRouter;
constructor(typedRouter: plugins.typedrequest.TypedRouter) {
this.typedRouter = typedRouter;
}
/**
* Handle a request - returns Response if handled, null otherwise
*/
public async handle(request: Request): Promise<Response | null> {
const url = new URL(request.url);
const path = url.pathname;
@plugins.smartserve.Post('/')
async handleTypedRequest(ctx: plugins.smartserve.IRequestContext): Promise<Response> {
try {
const response = await this.typedRouter.routeAndAddResponse(ctx.body as plugins.typedrequestInterfaces.ITypedRequest);
if (path === '/typedrequest' && request.method === 'POST') {
try {
const body = await request.json();
const response = await this.typedRouter.routeAndAddResponse(body);
return new Response(plugins.smartjson.stringify(response), {
status: 200,
headers: {
'Content-Type': 'application/json',
},
});
} catch (error) {
return new Response(JSON.stringify({ error: 'Invalid request' }), {
status: 400,
headers: {
'Content-Type': 'application/json',
},
});
}
return new Response(plugins.smartjson.stringify(response), {
status: 200,
headers: {
'Content-Type': 'application/json',
},
});
} catch (error) {
return new Response(JSON.stringify({ error: 'Invalid request' }), {
status: 400,
headers: {
'Content-Type': 'application/json',
},
});
}
return null;
}
}