import { axios, axiosUtils } from '@ice/runtime'; import type { AxiosRequestConfig, CancelTokenStatic, CancelStatic } from 'axios'; import createAxiosInstance from './createAxiosInstance'; interface IRequestConfig extends AxiosRequestConfig { instanceName?: string; withFullResponse?: boolean; } export interface IRequestProps { get: (url: string, config?: IRequestConfig) => Promise; delete: (url: string, config?: IRequestConfig) => Promise; head: (url: string, config?: IRequestConfig) => Promise; options: (url: string, config?: IRequestConfig) => Promise; post: (url: string, data?: any, config?: IRequestConfig) => Promise; put: (url: string, data?: any, config?: IRequestConfig) => Promise; patch: (url: string, data?: any, config?: IRequestConfig) => Promise; } interface IRequest extends IRequestProps { (options: IRequestConfig): Promise; (url: string, config?: IRequestConfig): Promise; Cancel: CancelStatic; CancelToken: CancelTokenStatic; isCancel(value: any): boolean; } /** * 请求体,返回 response.data | response * @param options 请求配置 https://github.com/axios/axios#request-config */ const request = async function (options): Promise { try { const instanceName = options.instanceName ? options.instanceName : 'default'; const axiosInstance = createAxiosInstance()[instanceName]; if (!(typeof axiosInstance === 'function')) { throw new Error(`unknown ${instanceName} in request method`); } const response = await axiosInstance(options); // @ts-ignore if (axiosInstance.defaults.withFullResponse || options.withFullResponse) { return response; } return response.data; } catch (error) { console.error(error); throw error; } }; // Provide aliases for supported request methods axiosUtils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) { request[method] = function (url, config) { return request(axiosUtils.merge(config || {}, { method, url })); }; }); axiosUtils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) { request[method] = function (url, data, config) { return request(axiosUtils.merge(config || {}, { method, url, data })); }; }); request.CancelToken = axios.CancelToken; request.isCancel = axios.isCancel; export default request as IRequest;