import { Context, Next } from 'koa' import { ExecutionContext } from '../lib/ExecutionContext' import { IMiddleware, Middleware } from '../lib/Middleware' export interface IProcessor extends IMiddleware { process(execCtx: ExecutionContext, next: Next): Promise } export abstract class Processor extends Middleware implements IProcessor { public constructor() { super() } public abstract async process(execCtx: ExecutionContext, next: Next): Promise public async execute(ctx: Context, next: Next): Promise { const execCtx = new ExecutionContext(ctx, ctx.moduleContext!) return this.process(execCtx, next) } }