import { Context } from '@zenweb/core'; /** * 结果渲染 */ export interface ResultRender { /** * 结果是否需要包装 */ enwrap: boolean; /** * 输出类型,例如 json */ type?: string; /** * 当前请求是否满足匹配结果渲染 */ match(ctx: Context, data?: unknown): boolean | Promise; /** * 渲染输出 * 支持 `async` * @param ctx 请求上下文 * @param data 需要处理的结果 */ render(ctx: Context, data?: unknown): unknown; } export declare class ResultOption { } export interface ResultOption { /** * 默认失败代码: 无 */ failCode?: number; /** * 输出失败代码到头信息中 * - string: 头信息key * - boolean: `true` 开启 `false` 关闭 * - true: 默认头信息key `X-Fail-Code` * @default true */ failCodeHeader?: string | boolean; /** * 默认失败消息内容 * @default 'request fail' */ failMessage?: string; /** * 默认失败HTTP状态码: 422 */ failStatus?: number; /** * 结果渲染器,依次匹配,如果没有匹配 `JSONRender` 将作为最终匹配输出 */ renders?: { new (): ResultRender; }[]; /** * 成功结果包装 * 支持 `async` */ successWrap?(ctx: Context, data?: unknown): unknown; /** * 错误结果包装 * 支持 `async` */ failWrap?(ctx: Context, err: ResultFail): unknown; /** * 暴露意外错误信息 * - 通常在开发环境中使用,方便从结果中分析问题 * @default process.env.EXPOSE_UNEXPECTED==1 || false */ exposeUnexpected?: boolean; /** * 意外错误状态码: 500 * @default 500 */ unexpectedStatus?: number; /** * 意外错误代码: 500 * @default 500 */ unexpectedCode?: number; } export interface ResultFailDetail { /** * 错误消息 */ message?: string; /** * 错误代码 */ code?: number; /** * HTTP代码 */ status?: number; /** * 附加数据 */ data?: unknown; /** * 额外字段 */ extra?: Record; } export declare class ResultFail extends Error implements ResultFailDetail { /** * 标示为可暴露信息 */ expose: boolean; code?: number; data?: unknown; status?: number; extra?: Record; constructor(detail: string | ResultFailDetail); }