mirror of
https://gitcode.com/gh_mirrors/hy/Hydro.git
synced 2026-10-20 01:38:19 +08:00
core: improved RendererContext typing
framework: improve typing
This commit is contained in:
1 file changed
+23
-15
@@ -106,13 +106,19 @@ export type KoaContext = Koa.Context & {
|
|||||||
holdFiles: (string | File)[];
|
holdFiles: (string | File)[];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
interface RendererContext {
|
||||||
|
handler: HandlerCommon;
|
||||||
|
UserContext: UserModel;
|
||||||
|
url: HandlerCommon['url'];
|
||||||
|
_: HandlerCommon['translate'];
|
||||||
|
}
|
||||||
export interface TextRenderer {
|
export interface TextRenderer {
|
||||||
output: 'html' | 'json' | 'text';
|
output: 'html' | 'json' | 'text';
|
||||||
render: (name: string, args: Record<string, any>, context: Record<string, any>) => string | Promise<string>;
|
render: (name: string, args: Record<string, any>, context: RendererContext) => string | Promise<string>;
|
||||||
}
|
}
|
||||||
export interface BinaryRenderer {
|
export interface BinaryRenderer {
|
||||||
output: 'binary';
|
output: 'binary';
|
||||||
render: (name: string, args: Record<string, any>, context: Record<string, any>) => Buffer | Promise<Buffer>;
|
render: (name: string, args: Record<string, any>, context: RendererContext) => Buffer | Promise<Buffer>;
|
||||||
}
|
}
|
||||||
export type Renderer = (BinaryRenderer | TextRenderer) & {
|
export type Renderer = (BinaryRenderer | TextRenderer) & {
|
||||||
name: string;
|
name: string;
|
||||||
@@ -306,7 +312,12 @@ export class NotFoundHandler extends Handler {
|
|||||||
all() { }
|
all() { }
|
||||||
}
|
}
|
||||||
|
|
||||||
function executeMiddlewareStack(context: any, middlewares: { name: string, func: Function }[]) {
|
export interface LayerEntry {
|
||||||
|
name: string;
|
||||||
|
func: (ctx: any, next: () => Promise<void>) => any;
|
||||||
|
}
|
||||||
|
|
||||||
|
function executeMiddlewareStack(context: any, middlewares: LayerEntry[]): Promise<void> {
|
||||||
let index = -1;
|
let index = -1;
|
||||||
context.__timers ||= {};
|
context.__timers ||= {};
|
||||||
function dispatch(i) {
|
function dispatch(i) {
|
||||||
@@ -344,9 +355,10 @@ export class WebService extends Service<never> {
|
|||||||
|
|
||||||
private registry: Record<string, any> = Object.create(null);
|
private registry: Record<string, any> = Object.create(null);
|
||||||
private registrationCount = Counter();
|
private registrationCount = Counter();
|
||||||
private serverLayers = [];
|
public routeMap: Record<string, string> = Object.create(null);
|
||||||
private handlerLayers = [];
|
private serverLayers: LayerEntry[] = [];
|
||||||
private wsLayers = [];
|
private handlerLayers: LayerEntry[] = [];
|
||||||
|
private wsLayers: LayerEntry[] = [];
|
||||||
private captureAllRoutes = Object.create(null);
|
private captureAllRoutes = Object.create(null);
|
||||||
private customDefaultContext: CordisContext;
|
private customDefaultContext: CordisContext;
|
||||||
private activeHandlers: Map<Handler, { start: number, name: string }> = new Map();
|
private activeHandlers: Map<Handler, { start: number, name: string }> = new Map();
|
||||||
@@ -794,10 +806,6 @@ ${c.response.status} ${endTime - startTime}ms ${c.response.length}`);
|
|||||||
|
|
||||||
// eslint-disable-next-line ts/naming-convention
|
// eslint-disable-next-line ts/naming-convention
|
||||||
public Route(name: string, path: string, RouteHandler: typeof Handler, ...permPrivChecker) {
|
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);
|
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);
|
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.ctx.effect(() => {
|
||||||
this[name].push(layer);
|
this[name].push(layer);
|
||||||
return () => {
|
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 });
|
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 });
|
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 });
|
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.addHandlerLayer(name, layer);
|
||||||
this.addWSLayer(name, layer);
|
this.addWSLayer(name, layer);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user