// @ts-nocheck // This file is generated by Umi automatically // DO NOT CHANGE IT MANUALLY! import axios, { type AxiosInstance, type AxiosRequestConfig, type AxiosResponse, type AxiosError, } from 'H:/af_code/af-react-mobile-base-client/node_modules/axios'; import useUmiRequest, { UseRequestProvider } from 'H:/af_code/af-react-mobile-base-client/node_modules/@ahooksjs/use-request'; import { ApplyPluginsType } from 'umi'; import { getPluginManager } from '../core/plugin'; import { BaseOptions, BasePaginatedOptions, BaseResult, CombineService, LoadMoreFormatReturn, LoadMoreOptions, LoadMoreOptionsWithFormat, LoadMoreParams, LoadMoreResult, OptionsWithFormat, PaginatedFormatReturn, PaginatedOptionsWithFormat, PaginatedParams, PaginatedResult, } from 'H:/af_code/af-react-mobile-base-client/node_modules/@ahooksjs/use-request/es/types'; type ResultWithData< T = any > = { data?: T; [key: string]: any }; function useRequest< R = any, P extends any[] = any, U = any, UU extends U = any, >( service: CombineService, options: OptionsWithFormat, ): BaseResult; function useRequest( service: CombineService, options?: BaseOptions, ): BaseResult; function useRequest( service: CombineService>, options: LoadMoreOptionsWithFormat, ): LoadMoreResult; function useRequest< R extends ResultWithData = any, RR extends R = any, >( service: CombineService>, options: LoadMoreOptions, ): LoadMoreResult; function useRequest( service: CombineService, options: PaginatedOptionsWithFormat, ): PaginatedResult; function useRequest( service: CombineService< ResultWithData>, PaginatedParams >, options: BasePaginatedOptions, ): PaginatedResult; function useRequest(service: any, options: any = {}) { return useUmiRequest(service, { formatResult: result => result?.data, requestMethod: (requestOptions: any) => { if (typeof requestOptions === 'string') { return request(requestOptions); } if (typeof requestOptions === 'object') { const { url, ...rest } = requestOptions; return request(url, rest); } throw new Error('request options error'); }, ...options, }); } // request 方法 opts 参数的接口 interface IRequestOptions extends AxiosRequestConfig { skipErrorHandler?: boolean; requestInterceptors?: IRequestInterceptorTuple[]; responseInterceptors?: IResponseInterceptorTuple[]; [key: string]: any; } interface IRequestOptionsWithResponse extends IRequestOptions { getResponse: true; } interface IRequestOptionsWithoutResponse extends IRequestOptions{ getResponse: false; } interface IRequest{ (url: string, opts: IRequestOptionsWithResponse): Promise>; (url: string, opts: IRequestOptionsWithoutResponse): Promise; (url: string, opts: IRequestOptions): Promise; // getResponse 默认是 false, 因此不提供该参数时,只返回 data (url: string): Promise; // 不提供 opts 时,默认使用 'GET' method,并且默认返回 data } type RequestError = AxiosError | Error interface IErrorHandler { (error: RequestError, opts: IRequestOptions): void; } type IRequestInterceptorAxios = (config: RequestOptions) => RequestOptions; type IRequestInterceptorUmiRequest = (url: string, config : RequestOptions) => { url: string, options: RequestOptions }; type IRequestInterceptor = IRequestInterceptorAxios | IRequestInterceptorUmiRequest; type IErrorInterceptor = (error: Error) => Promise; type IResponseInterceptor = (response : AxiosResponse) => AxiosResponse ; type IRequestInterceptorTuple = [IRequestInterceptor , IErrorInterceptor] | [ IRequestInterceptor ] | IRequestInterceptor type IResponseInterceptorTuple = [IResponseInterceptor, IErrorInterceptor] | [IResponseInterceptor] | IResponseInterceptor export interface RequestConfig extends AxiosRequestConfig { errorConfig?: { errorHandler?: IErrorHandler; errorThrower?: ( res: T ) => void }; requestInterceptors?: IRequestInterceptorTuple[]; responseInterceptors?: IResponseInterceptorTuple[]; } let requestInstance: AxiosInstance; let config: RequestConfig; const getConfig = (): RequestConfig => { if (config) return config; config = getPluginManager().applyPlugins({ key: 'request', type: ApplyPluginsType.modify, initialValue: {}, }); return config; }; const getRequestInstance = (): AxiosInstance => { if (requestInstance) return requestInstance; const config = getConfig(); requestInstance = axios.create(config); config?.requestInterceptors?.forEach((interceptor) => { if(interceptor instanceof Array){ requestInstance.interceptors.request.use((config) => { const { url } = config; if(interceptor[0].length === 2){ const { url: newUrl, options } = interceptor[0](url, config); return { ...options, url: newUrl }; } return interceptor[0](config); }, interceptor[1]); } else { requestInstance.interceptors.request.use((config) => { const { url } = config; if(interceptor.length === 2){ const { url: newUrl, options } = interceptor(url, config); return { ...options, url: newUrl }; } return interceptor(config); }) } }); config?.responseInterceptors?.forEach((interceptor) => { interceptor instanceof Array ? requestInstance.interceptors.response.use(interceptor[0], interceptor[1]): requestInstance.interceptors.response.use(interceptor); }); // 当响应的数据 success 是 false 的时候,抛出 error 以供 errorHandler 处理。 requestInstance.interceptors.response.use((response) => { const { data } = response; if(data?.success === false && config?.errorConfig?.errorThrower){ config.errorConfig.errorThrower(data); } return response; }) return requestInstance; }; const request: IRequest = (url: string, opts: any = { method: 'GET' }) => { const requestInstance = getRequestInstance(); const config = getConfig(); const { getResponse = false, requestInterceptors, responseInterceptors } = opts; const requestInterceptorsToEject = requestInterceptors?.map((interceptor) => { if(interceptor instanceof Array){ return requestInstance.interceptors.request.use((config) => { const { url } = config; if(interceptor[0].length === 2){ const { url: newUrl, options } = interceptor[0](url, config); return { ...options, url: newUrl }; } return interceptor[0](config); }, interceptor[1]); } else { return requestInstance.interceptors.request.use((config) => { const { url } = config; if(interceptor.length === 2){ const { url: newUrl, options } = interceptor(url, config); return { ...options, url: newUrl }; } return interceptor(config); }) } }); const responseInterceptorsToEject = responseInterceptors?.map((interceptor) => { return interceptor instanceof Array ? requestInstance.interceptors.response.use(interceptor[0], interceptor[1]): requestInstance.interceptors.response.use(interceptor); }); return new Promise((resolve, reject)=>{ requestInstance .request({...opts, url}) .then((res)=>{ requestInterceptorsToEject?.forEach((interceptor) => { requestInstance.interceptors.request.eject(interceptor); }); responseInterceptorsToEject?.forEach((interceptor) => { requestInstance.interceptors.response.eject(interceptor); }); resolve(getResponse ? res : res.data); }) .catch((error)=>{ requestInterceptorsToEject?.forEach((interceptor) => { requestInstance.interceptors.request.eject(interceptor); }); responseInterceptorsToEject?.forEach((interceptor) => { requestInstance.interceptors.response.eject(interceptor); }); try { const handler = config?.errorConfig?.errorHandler; if(handler) handler(error, opts, config); } catch (e) { reject(e); } reject(error); }) }) } export { useRequest, UseRequestProvider, request, getRequestInstance, }; export type { AxiosInstance, AxiosRequestConfig, AxiosResponse, AxiosError, RequestError, IResponseInterceptor as ResponseInterceptor, IRequestOptions as RequestOptions, IRequest as Request, };