You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
import utils from '../utils.js';import httpAdapter from './http.js';import xhrAdapter from './xhr.js';import * as fetchAdapter from './fetch.js';import AxiosError from "../core/AxiosError.js";
const knownAdapters = { http: httpAdapter, xhr: xhrAdapter, fetch: { get: fetchAdapter.getFetch, }}
utils.forEach(knownAdapters, (fn, value) => { if (fn) { try { Object.defineProperty(fn, 'name', {value}); } catch (e) { // eslint-disable-next-line no-empty
} Object.defineProperty(fn, 'adapterName', {value}); }});
const renderReason = (reason) => `- ${reason}`;
const isResolvedHandle = (adapter) => utils.isFunction(adapter) || adapter === null || adapter === false;
export default { getAdapter: (adapters, config) => { adapters = utils.isArray(adapters) ? adapters : [adapters];
const {length} = adapters; let nameOrAdapter; let adapter;
const rejectedReasons = {};
for (let i = 0; i < length; i++) { nameOrAdapter = adapters[i]; let id;
adapter = nameOrAdapter;
if (!isResolvedHandle(nameOrAdapter)) { adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];
if (adapter === undefined) { throw new AxiosError(`Unknown adapter '${id}'`); } }
if (adapter && (utils.isFunction(adapter) || (adapter = adapter.get(config)))) { break; }
rejectedReasons[id || '#' + i] = adapter; }
if (!adapter) {
const reasons = Object.entries(rejectedReasons) .map(([id, state]) => `adapter ${id} ` + (state === false ? 'is not supported by the environment' : 'is not available in the build') );
let s = length ? (reasons.length > 1 ? 'since :\n' + reasons.map(renderReason).join('\n') : ' ' + renderReason(reasons[0])) : 'as no adapter specified';
throw new AxiosError( `There is no suitable adapter to dispatch the request ` + s, 'ERR_NOT_SUPPORT' ); }
return adapter; }, adapters: knownAdapters}
|