///
import type * as HTTP from '../types/http';
import type toast from '../utils/fn/toast';
import type HttpError from './HttpError';
interface BaseRequestConfig extends HTTP.RequestConfig {
}
/**
* 全局请求配置.
*/
interface GlobalRequestConfig extends BaseRequestConfig {
/**
* 消息提示函数, 目前统一提示成功或者错误消息, 设置`undefined`关闭消息提示.
* 如需单独针对成功或者错误提示, 请在`message`配置中处理.
*/
toast?: typeof toast;
/**
* 消息提示函数, 优先级高于`toast`, 可针对成功、错误单独处理.
*/
message?: {
/**
* 成功提示函数, `msg`选项为true时调用, 用于统一处理后端成功状态下消息提示.
* 如果关闭`defaultResult`则不会调用, 可在响应拦截器中或者`finalResult`中自定义处理.
*/
success?: (
/**
* 成功消息,通常为响应数据中`msg`或者`message`.
*/
msg: string) => void;
/**
* 错误提示函数, `errmsg`选项为true时调用. 处理整个请求中捕获的错误, 包括系统错误或者业务错误.
*/
error?: (
/**
* 错误消息, 通常抛出错误会有具体的消息, 如果为业务错误通常为响应数据中`msg`或者`message`.
* 也可以根据err参数自定义错误消息而不使用具体的错误消息.
*/
msg: string,
/**
* 错误对象. Error name `BizError`业务错误, `MiniError`小程序原生错误, `NetworkDisconnected`网络中断.
*/
err?: Error | HttpError) => void;
};
/**
* 统一错误处理函数, 包含请求和响应中捕获的错误, 比如系统错误或者业务错误.
* 内部可直接`return`吃掉错误或者继续`throw`出去, throw请保持错误一致性为`Error`或者`HttpError`.
* 如果定义了错误提示函数,throw出去的错误也会进入其中, 建议在错误提示函数中统一处理错误提示,
* 不要在`errorHandler`中提示错误, 避免多次提示. 或者关闭`toast`和错误提示函数, 在`errorHandler`中单独处理错误提示.
*/
errorHandler?: (
/**
* 错误对象. Error name `BizError`业务错误, `MiniError`小程序原生错误, `NetworkDisconnected`网络中断.
*/
err: Error | HttpError) => void;
/**
* 返回结果转换器, 用于在`defaultResult`中转换数据为`ResponseTemplate`结构.
* 如果未配置结果转换器则返回原始data而非业务data.
* 注:仅在使用`defaultResult`时`dataConverter`才起效, 响应拦截器之后执行.
*/
dataConverter?: (resp: HTTP.RawResponse) => HTTP.ResponseTemplate;
/**
* 默认响应结果为业务数据, 可设置`undefined`关闭默认逻辑, 同时会关闭`dataConverter`, 后续data则为原始数据.
* 设置`resp`为true返回`[Data, RawData, RawResponse]`.
* 注:响应拦截器之后执行.
*/
defaultResult?: (
/**
* 原始响应.
*/
response: HTTP.RawResponse,
/**
* 请求配置.
*/
options: HTTP.RequestConfig,
/**
* 全局请求配置.
*/
globalConfig: GlobalRequestConfig) => D;
/**
* 最终响应结果, 建议默认业务数据, 可根据情况修改比如返回原始数据或者原始响应.
* data maybe BizData, RawData, [undefined, RawData, RawResponse],
* [BizData, RawRata, RawResponse].
* 注:响应拦截器和`defaultResult`之后执行.
*/
finalResult?: (
/**
* 业务数据或者原始数据.
*/
data: D,
/**
* 原始数据, 接口整个数据.
*/
rawData: unknown,
/**
* 原始响应, 包含响应头、响应状态等信息.
*/
resp: HTTP.RawResponse) => D;
/**
* 请求拦截器.
*/
requestInterceptors?: HTTP.RequestInterceptor[];
/**
* 响应拦截器.
*/
responseInterceptors?: HTTP.DefaultResponseInterceptor[];
/**
* 中间件列表.
*/
middlewares?: HTTP.Middleware[];
}
export type { BaseRequestConfig, GlobalRequestConfig };
export default GlobalRequestConfig;