diff --git a/index.d.cts b/index.d.cts index 9eac341fe4..bf2c92f83f 100644 --- a/index.d.cts +++ b/index.d.cts @@ -523,6 +523,7 @@ declare namespace axios { isAxiosError(payload: any): payload is AxiosError; toFormData(sourceObj: object, targetFormData?: GenericFormData, options?: FormSerializerOptions): GenericFormData; formToJSON(form: GenericFormData|GenericHTMLFormElement): object; + getAdapter(adapters: AxiosAdapterConfig | AxiosAdapterConfig[] | undefined): AxiosAdapter; AxiosHeaders: typeof AxiosHeaders; } } diff --git a/index.d.ts b/index.d.ts index e194461fde..ec38dce249 100644 --- a/index.d.ts +++ b/index.d.ts @@ -512,6 +512,8 @@ export interface GenericHTMLFormElement { submit(): void; } +export function getAdapter(adapters: AxiosAdapterConfig | AxiosAdapterConfig[] | undefined): AxiosAdapter; + export function toFormData(sourceObj: object, targetFormData?: GenericFormData, options?: FormSerializerOptions): GenericFormData; export function formToJSON(form: GenericFormData|GenericHTMLFormElement): object; @@ -538,6 +540,7 @@ export interface AxiosStatic extends AxiosInstance { isAxiosError: typeof isAxiosError; toFormData: typeof toFormData; formToJSON: typeof formToJSON; + getAdapter: typeof getAdapter; CanceledError: typeof CanceledError; AxiosHeaders: typeof AxiosHeaders; } diff --git a/index.js b/index.js index 4920f55c41..fba3990d8c 100644 --- a/index.js +++ b/index.js @@ -18,6 +18,7 @@ const { AxiosHeaders, HttpStatusCode, formToJSON, + getAdapter, mergeConfig } = axios; @@ -37,5 +38,6 @@ export { AxiosHeaders, HttpStatusCode, formToJSON, + getAdapter, mergeConfig } diff --git a/lib/axios.js b/lib/axios.js index c97e062e00..873f246daf 100644 --- a/lib/axios.js +++ b/lib/axios.js @@ -15,6 +15,7 @@ import AxiosError from './core/AxiosError.js'; import spread from './helpers/spread.js'; import isAxiosError from './helpers/isAxiosError.js'; import AxiosHeaders from "./core/AxiosHeaders.js"; +import adapters from './adapters/adapters.js'; import HttpStatusCode from './helpers/HttpStatusCode.js'; /** @@ -78,6 +79,8 @@ axios.AxiosHeaders = AxiosHeaders; axios.formToJSON = thing => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing); +axios.getAdapter = adapters.getAdapter; + axios.HttpStatusCode = HttpStatusCode; axios.default = axios; diff --git a/test/module/typings/esm/index.ts b/test/module/typings/esm/index.ts index 938652e7c7..b7c4fbc5b7 100644 --- a/test/module/typings/esm/index.ts +++ b/test/module/typings/esm/index.ts @@ -16,6 +16,7 @@ import axios, { ParamsSerializerOptions, toFormData, formToJSON, + getAdapter, all, isCancel, isAxiosError, @@ -570,6 +571,33 @@ axios.get('/user', { adapter: ['xhr', 'http'] }); + +{ + // getAdapter + + getAdapter(axios.create().defaults.adapter); + getAdapter(undefined); + getAdapter([]); + getAdapter(['xhr']); + getAdapter([adapter]); + getAdapter(['xhr', 'http']); + getAdapter([adapter, 'xhr']); + getAdapter([adapter, adapter]); + getAdapter('xhr'); + getAdapter(adapter); + const _: AxiosAdapter = getAdapter('xhr'); + const __: AxiosAdapter = getAdapter(['xhr']); + + // @ts-expect-error + getAdapter(); + // @ts-expect-error + getAdapter(123); + // @ts-expect-error + getAdapter([123]); + // @ts-expect-error + getAdapter('xhr', 'http'); +} + // AxiosHeaders // iterator diff --git a/test/specs/api.spec.js b/test/specs/api.spec.js index 4c65d13535..eab50e7af4 100644 --- a/test/specs/api.spec.js +++ b/test/specs/api.spec.js @@ -54,6 +54,10 @@ describe('static api', function () { it('should have mergeConfig properties', function () { expect(typeof axios.mergeConfig).toEqual('function'); }); + + it('should have getAdapter properties', function () { + expect(typeof axios.getAdapter).toEqual('function'); + }); }); describe('instance api', function () { diff --git a/test/specs/instance.spec.js b/test/specs/instance.spec.js index 78fd7b3eb6..46426e56b8 100644 --- a/test/specs/instance.spec.js +++ b/test/specs/instance.spec.js @@ -24,6 +24,7 @@ describe('instance', function () { 'getUri', 'isAxiosError', 'mergeConfig', + 'getAdapter', 'VERSION', 'default', 'toFormData',