| 'use strict'; | 
|   | 
| var utils = require('./../utils'); | 
| var buildURL = require('../helpers/buildURL'); | 
| var InterceptorManager = require('./InterceptorManager'); | 
| var dispatchRequest = require('./dispatchRequest'); | 
| var mergeConfig = require('./mergeConfig'); | 
| 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(config) { | 
|   /*eslint no-param-reassign:0*/ | 
|   // Allow for axios('example/url'[, config]) a la fetch API | 
|   if (typeof config === 'string') { | 
|     config = arguments[1] || {}; | 
|     config.url = arguments[0]; | 
|   } else { | 
|     config = config || {}; | 
|   } | 
|   | 
|   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); | 
|   return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\?/, ''); | 
| }; | 
|   | 
| // 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*/ | 
|   Axios.prototype[method] = function(url, data, config) { | 
|     return this.request(mergeConfig(config || {}, { | 
|       method: method, | 
|       url: url, | 
|       data: data | 
|     })); | 
|   }; | 
| }); | 
|   | 
| module.exports = Axios; |