From e2a07e6105a05e4a6450b7705eabea8c104161cc Mon Sep 17 00:00:00 2001 From: Baoshuo Date: Thu, 25 Dec 2025 12:25:11 +0800 Subject: [PATCH] core: improved RendererContext typing framework: improve typing --- framework/framework/server.ts | 38 +++++++++++++++++++++-------------- 1 file changed, 23 insertions(+), 15 deletions(-) diff --git a/framework/framework/server.ts b/framework/framework/server.ts index 2e17b282d..fc46f2c6c 100644 --- a/framework/framework/server.ts +++ b/framework/framework/server.ts @@ -106,13 +106,19 @@ export type KoaContext = Koa.Context & { holdFiles: (string | File)[]; }; +interface RendererContext { + handler: HandlerCommon; + UserContext: UserModel; + url: HandlerCommon['url']; + _: HandlerCommon['translate']; +} export interface TextRenderer { output: 'html' | 'json' | 'text'; - render: (name: string, args: Record, context: Record) => string | Promise; + render: (name: string, args: Record, context: RendererContext) => string | Promise; } export interface BinaryRenderer { output: 'binary'; - render: (name: string, args: Record, context: Record) => Buffer | Promise; + render: (name: string, args: Record, context: RendererContext) => Buffer | Promise; } export type Renderer = (BinaryRenderer | TextRenderer) & { name: string; @@ -306,7 +312,12 @@ export class NotFoundHandler extends Handler { all() { } } -function executeMiddlewareStack(context: any, middlewares: { name: string, func: Function }[]) { +export interface LayerEntry { + name: string; + func: (ctx: any, next: () => Promise) => any; +} + +function executeMiddlewareStack(context: any, middlewares: LayerEntry[]): Promise { let index = -1; context.__timers ||= {}; function dispatch(i) { @@ -344,9 +355,10 @@ export class WebService extends Service { private registry: Record = Object.create(null); private registrationCount = Counter(); - private serverLayers = []; - private handlerLayers = []; - private wsLayers = []; + public routeMap: Record = Object.create(null); + private serverLayers: LayerEntry[] = []; + private handlerLayers: LayerEntry[] = []; + private wsLayers: LayerEntry[] = []; private captureAllRoutes = Object.create(null); private customDefaultContext: CordisContext; private activeHandlers: Map = new Map(); @@ -794,10 +806,6 @@ ${c.response.status} ${endTime - startTime}ms ${c.response.length}`); // eslint-disable-next-line ts/naming-convention public Route(name: string, path: string, RouteHandler: typeof Handler, ...permPrivChecker) { - // if (name === 'contest_scoreboard') { - // console.log('+++', this.ctx); - // console.log(this.ctx.scoreboard); - // } return this.register('route', name, path, RouteHandler, ...permPrivChecker); } @@ -806,7 +814,7 @@ ${c.response.status} ${endTime - startTime}ms ${c.response.length}`); return this.register('conn', name, path, RouteHandler, ...permPrivChecker); } - private registerLayer(name: 'serverLayers' | 'handlerLayers' | 'wsLayers', layer: any) { + private registerLayer(name: 'serverLayers' | 'handlerLayers' | 'wsLayers', layer: LayerEntry) { this.ctx.effect(() => { this[name].push(layer); return () => { @@ -815,19 +823,19 @@ ${c.response.status} ${endTime - startTime}ms ${c.response.length}`); }); } - public addServerLayer(name: string, func: any) { + public addServerLayer(name: LayerEntry['name'], func: LayerEntry['func']) { return this.registerLayer('serverLayers', { name, func }); } - public addHandlerLayer(name: string, func: any) { + public addHandlerLayer(name: LayerEntry['name'], func: LayerEntry['func']) { return this.registerLayer('handlerLayers', { name, func }); } - public addWSLayer(name: string, func: any) { + public addWSLayer(name: LayerEntry['name'], func: LayerEntry['func']) { return this.registerLayer('wsLayers', { name, func }); } - public addLayer(name: string, layer: any) { + public addLayer(name: LayerEntry['name'], layer: LayerEntry['func']) { this.addHandlerLayer(name, layer); this.addWSLayer(name, layer); }