/** * chumi运行时框架核心代码 */ import { Context, Next } from 'koa'; import koaBody from 'koa-body'; import { Ctr, SwaggerOptions } from './constants'; export { ALL, loadService, loadController } from './constants'; export * from './Methods'; export * from './Parameters'; export { default as Controller } from './Controller'; export { default as Service } from './Service'; export { default as ApiTags } from './ApiTags'; export interface ChumiOptions { /** * 如果项目之前已经使用了koa-body,或者类似的处理函数,这个参数就不需要传了 */ koaBody?: koaBody.IKoaBodyOptions; /** * 当chumi中间件开始时触发 */ onStart?: (ctx: T) => Promise | void; /** * 当chumi中间件业务发生错误时触发 */ onError?: (ctx: T, error: Error) => Promise | void; /** * 当chumi中间件业务成功时触发 */ onSuccess?: (ctx: T) => Promise | void; /** * 当chumi中间件业务完成时触发 */ onFinish?: (ctx: T) => Promise | void; /** * 开启swagger * * 默认访问 /swagger-ui/index.html */ swagger?: SwaggerOptions; /** * 当前chumi下所有路由地址的统一前缀 */ prefix?: string; /** * 支持传数据到控制器里面 * * 在控制器可以使用,ctx.chumi 获取到当前传的数据 */ data?: Record; /** * 是否跳过chumi路由和控制器,即不执行chumi任何路由挂载逻辑 * * 1. 返回`true`表示跳过 * 2. 返回`false`表示不跳过 */ skip?: (ctx: T) => Promise | boolean; /** * koa中间件数组,承担当前chumi路由的前置处理 */ middlewares?: ((ctx: T, next: Next) => Promise)[]; /** * 匹配到控制器路由,生效的中间件 */ controllerMiddlewares?: ((ctx: T, next: Next) => Promise)[]; } type AsyncReturnType Promise> = T extends (...args: any) => Promise ? R : T; export type ChumiResponseData any, T extends keyof InstanceType> = AsyncReturnType[T]>; export type ChumiRequestData any, T extends keyof InstanceType> = Parameters[T]>; /** * 基于koa的运行时中间件框架 * * ``` * 参数1: controllers: Ctr[] | Record * 如果指定了prefix,则最终的prefix = 参数2的prefix + 参数1的prefix * 参数2: {} * koaBody: 指定启动body解析,如果框架内已内置,则不需要配置 * onStart: 当chumi中间件开始时触发 * onError: 仅当chumi中间件业务发生错误时触发 * onSuccess: 仅当chumi中间件业务成功时触发 * onFinish: 当chumi中间件业务完成时触发,不管失败、成功都会触发 * swagger: 开启swagger * prefix: 当前chumi下所有路由地址的统一前缀 * middlewares: 指定koa中间件数组 * controllerMiddlewares: 指定koa中间件数组,仅当路由匹配到时触发,属于挂载在控制器上的中间件 * data * skip * ``` */ export declare const chumi: (controllers: Ctr, options?: ChumiOptions) => (ctx: T & Context, next: Next) => Promise; export default chumi;