adapters.js 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import utils from '../utils.js';
  2. import httpAdapter from './http.js';
  3. import xhrAdapter from './xhr.js';
  4. import AxiosError from "../core/AxiosError.js";
  5. const knownAdapters = {
  6. http: httpAdapter,
  7. xhr: xhrAdapter
  8. }
  9. utils.forEach(knownAdapters, (fn, value) => {
  10. if(fn) {
  11. try {
  12. Object.defineProperty(fn, 'name', {value});
  13. } catch (e) {
  14. // eslint-disable-next-line no-empty
  15. }
  16. Object.defineProperty(fn, 'adapterName', {value});
  17. }
  18. });
  19. export default {
  20. getAdapter: (adapters) => {
  21. adapters = utils.isArray(adapters) ? adapters : [adapters];
  22. const {length} = adapters;
  23. let nameOrAdapter;
  24. let adapter;
  25. for (let i = 0; i < length; i++) {
  26. nameOrAdapter = adapters[i];
  27. if((adapter = utils.isString(nameOrAdapter) ? knownAdapters[nameOrAdapter.toLowerCase()] : nameOrAdapter)) {
  28. break;
  29. }
  30. }
  31. if (!adapter) {
  32. if (adapter === false) {
  33. throw new AxiosError(
  34. `Adapter ${nameOrAdapter} is not supported by the environment`,
  35. 'ERR_NOT_SUPPORT'
  36. );
  37. }
  38. throw new Error(
  39. utils.hasOwnProp(knownAdapters, nameOrAdapter) ?
  40. `Adapter '${nameOrAdapter}' is not available in the build` :
  41. `Unknown adapter '${nameOrAdapter}'`
  42. );
  43. }
  44. if (!utils.isFunction(adapter)) {
  45. throw new TypeError('adapter is not a function');
  46. }
  47. return adapter;
  48. },
  49. adapters: knownAdapters
  50. }