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.
		
		
		
		
		
			
		
			
				
					161 lines
				
				4.5 KiB
			
		
		
			
		
	
	
					161 lines
				
				4.5 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								'use strict';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var utils = require('./../utils');
							 | 
						||
| 
								 | 
							
								var buildURL = require('../helpers/buildURL');
							 | 
						||
| 
								 | 
							
								var InterceptorManager = require('./InterceptorManager');
							 | 
						||
| 
								 | 
							
								var dispatchRequest = require('./dispatchRequest');
							 | 
						||
| 
								 | 
							
								var mergeConfig = require('./mergeConfig');
							 | 
						||
| 
								 | 
							
								var buildFullPath = require('./buildFullPath');
							 | 
						||
| 
								 | 
							
								var validator = require('../helpers/validator');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var validators = validator.validators;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Create a new instance of Axios
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @param {Object} instanceConfig The default config for the instance
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								function Axios(instanceConfig) {
							 | 
						||
| 
								 | 
							
								  this.defaults = instanceConfig;
							 | 
						||
| 
								 | 
							
								  this.interceptors = {
							 | 
						||
| 
								 | 
							
								    request: new InterceptorManager(),
							 | 
						||
| 
								 | 
							
								    response: new InterceptorManager()
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Dispatch a request
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @param {Object} config The config specific for this request (merged with this.defaults)
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								Axios.prototype.request = function request(configOrUrl, config) {
							 | 
						||
| 
								 | 
							
								  /*eslint no-param-reassign:0*/
							 | 
						||
| 
								 | 
							
								  // Allow for axios('example/url'[, config]) a la fetch API
							 | 
						||
| 
								 | 
							
								  if (typeof configOrUrl === 'string') {
							 | 
						||
| 
								 | 
							
								    config = config || {};
							 | 
						||
| 
								 | 
							
								    config.url = configOrUrl;
							 | 
						||
| 
								 | 
							
								  } else {
							 | 
						||
| 
								 | 
							
								    config = configOrUrl || {};
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  config = mergeConfig(this.defaults, config);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  // Set config.method
							 | 
						||
| 
								 | 
							
								  if (config.method) {
							 | 
						||
| 
								 | 
							
								    config.method = config.method.toLowerCase();
							 | 
						||
| 
								 | 
							
								  } else if (this.defaults.method) {
							 | 
						||
| 
								 | 
							
								    config.method = this.defaults.method.toLowerCase();
							 | 
						||
| 
								 | 
							
								  } else {
							 | 
						||
| 
								 | 
							
								    config.method = 'get';
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  var transitional = config.transitional;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if (transitional !== undefined) {
							 | 
						||
| 
								 | 
							
								    validator.assertOptions(transitional, {
							 | 
						||
| 
								 | 
							
								      silentJSONParsing: validators.transitional(validators.boolean),
							 | 
						||
| 
								 | 
							
								      forcedJSONParsing: validators.transitional(validators.boolean),
							 | 
						||
| 
								 | 
							
								      clarifyTimeoutError: validators.transitional(validators.boolean)
							 | 
						||
| 
								 | 
							
								    }, false);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  // filter out skipped interceptors
							 | 
						||
| 
								 | 
							
								  var requestInterceptorChain = [];
							 | 
						||
| 
								 | 
							
								  var synchronousRequestInterceptors = true;
							 | 
						||
| 
								 | 
							
								  this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {
							 | 
						||
| 
								 | 
							
								    if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {
							 | 
						||
| 
								 | 
							
								      return;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  var responseInterceptorChain = [];
							 | 
						||
| 
								 | 
							
								  this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {
							 | 
						||
| 
								 | 
							
								    responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  var promise;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if (!synchronousRequestInterceptors) {
							 | 
						||
| 
								 | 
							
								    var chain = [dispatchRequest, undefined];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Array.prototype.unshift.apply(chain, requestInterceptorChain);
							 | 
						||
| 
								 | 
							
								    chain = chain.concat(responseInterceptorChain);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    promise = Promise.resolve(config);
							 | 
						||
| 
								 | 
							
								    while (chain.length) {
							 | 
						||
| 
								 | 
							
								      promise = promise.then(chain.shift(), chain.shift());
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return promise;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  var newConfig = config;
							 | 
						||
| 
								 | 
							
								  while (requestInterceptorChain.length) {
							 | 
						||
| 
								 | 
							
								    var onFulfilled = requestInterceptorChain.shift();
							 | 
						||
| 
								 | 
							
								    var onRejected = requestInterceptorChain.shift();
							 | 
						||
| 
								 | 
							
								    try {
							 | 
						||
| 
								 | 
							
								      newConfig = onFulfilled(newConfig);
							 | 
						||
| 
								 | 
							
								    } catch (error) {
							 | 
						||
| 
								 | 
							
								      onRejected(error);
							 | 
						||
| 
								 | 
							
								      break;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  try {
							 | 
						||
| 
								 | 
							
								    promise = dispatchRequest(newConfig);
							 | 
						||
| 
								 | 
							
								  } catch (error) {
							 | 
						||
| 
								 | 
							
								    return Promise.reject(error);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  while (responseInterceptorChain.length) {
							 | 
						||
| 
								 | 
							
								    promise = promise.then(responseInterceptorChain.shift(), responseInterceptorChain.shift());
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  return promise;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Axios.prototype.getUri = function getUri(config) {
							 | 
						||
| 
								 | 
							
								  config = mergeConfig(this.defaults, config);
							 | 
						||
| 
								 | 
							
								  var fullPath = buildFullPath(config.baseURL, config.url);
							 | 
						||
| 
								 | 
							
								  return buildURL(fullPath, config.params, config.paramsSerializer);
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Provide aliases for supported request methods
							 | 
						||
| 
								 | 
							
								utils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {
							 | 
						||
| 
								 | 
							
								  /*eslint func-names:0*/
							 | 
						||
| 
								 | 
							
								  Axios.prototype[method] = function(url, config) {
							 | 
						||
| 
								 | 
							
								    return this.request(mergeConfig(config || {}, {
							 | 
						||
| 
								 | 
							
								      method: method,
							 | 
						||
| 
								 | 
							
								      url: url,
							 | 
						||
| 
								 | 
							
								      data: (config || {}).data
							 | 
						||
| 
								 | 
							
								    }));
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {
							 | 
						||
| 
								 | 
							
								  /*eslint func-names:0*/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  function generateHTTPMethod(isForm) {
							 | 
						||
| 
								 | 
							
								    return function httpMethod(url, data, config) {
							 | 
						||
| 
								 | 
							
								      return this.request(mergeConfig(config || {}, {
							 | 
						||
| 
								 | 
							
								        method: method,
							 | 
						||
| 
								 | 
							
								        headers: isForm ? {
							 | 
						||
| 
								 | 
							
								          'Content-Type': 'multipart/form-data'
							 | 
						||
| 
								 | 
							
								        } : {},
							 | 
						||
| 
								 | 
							
								        url: url,
							 | 
						||
| 
								 | 
							
								        data: data
							 | 
						||
| 
								 | 
							
								      }));
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  Axios.prototype[method] = generateHTTPMethod();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  Axios.prototype[method + 'Form'] = generateHTTPMethod(true);
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								module.exports = Axios;
							 |