UNPKG

@alova/adapter-axios

Version:

axios adapter for alova.js

94 lines (92 loc) 2.73 kB
/** * @alova/adapter-axios 2.0.20 (https://alova.js.org) * Document https://alova.js.org * Copyright 2026 Scott Hu. All Rights Reserved * Licensed under MIT (git://github.com/alovajs/alova/blob/main/LICENSE) */ import { newInstance, noop, undefinedValue } from "@alova/shared"; import axios, { AxiosError, AxiosHeaders } from "axios"; //#region src/mockResponse.ts const mockResponseHandler = ({ status, statusText, body }, _, currentMethod) => { const responseHeaders = {}; const { config } = currentMethod; const axiosConfig = { baseURL: currentMethod.baseURL, url: currentMethod.url, data: currentMethod.data, ...config, headers: new AxiosHeaders(config.headers) }; const axiosResponse = { data: body, status, statusText, headers: responseHeaders, config: axiosConfig }; if (status >= 400) throw new AxiosError(statusText, "ERR_BAD_REQUEST", axiosConfig, undefinedValue, axiosResponse); return { response: axiosResponse, headers: responseHeaders }; }; const mockErrorHandler = (error, currentMethod) => { const { config } = currentMethod; return new AxiosError(error.message, "ERR_NETWORK", { baseURL: currentMethod.baseURL, url: currentMethod.url, data: currentMethod.data, ...config, headers: new AxiosHeaders(config.headers) }); }; var mockResponse_default = { onMockResponse: mockResponseHandler, onMockError: mockErrorHandler }; //#endregion //#region src/requestAdapter.ts /** * axios request adapter */ function requestAdapter(options = {}) { const adaptedAxiosInstance = options.axios || axios; const adapter = (_, method) => { let downloadHandler = noop; let uploadHandler = noop; const { config } = method; const controller = new AbortController(); const { baseURL, timeout } = adaptedAxiosInstance.defaults; const responsePromise = adaptedAxiosInstance({ url: method.url, method: method.type, baseURL: baseURL || method.baseURL, timeout: timeout || method.config.timeout, data: method.data, signal: controller.signal, onUploadProgress: process.env.NODE_ENV !== "test" ? (event) => { uploadHandler(event.loaded, event.total || 1); } : undefinedValue, onDownloadProgress: (event) => { downloadHandler(event.loaded, event.total || 1); }, ...config }); return { response: () => responsePromise, headers: () => responsePromise.then((res) => res?.headers || newInstance(AxiosHeaders)), abort: () => { controller.abort(); }, onDownload: (handler) => { downloadHandler = handler; }, onUpload: (handler) => { uploadHandler = handler; } }; }; return adapter; } //#endregion export { mockResponse_default as axiosMockResponse, requestAdapter as axiosRequestAdapter };