3750 lines
		
	
	
		
			96 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
		
		
			
		
	
	
			3750 lines
		
	
	
		
			96 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
|  | /*! Axios v1.9.0 Copyright (c) 2025 Matt Zabriskie and contributors */ | ||
|  | function bind(fn, thisArg) { | ||
|  |   return function wrap() { | ||
|  |     return fn.apply(thisArg, arguments); | ||
|  |   }; | ||
|  | } | ||
|  | 
 | ||
|  | // utils is a library of generic helper functions non-specific to axios
 | ||
|  | 
 | ||
|  | const {toString} = Object.prototype; | ||
|  | const {getPrototypeOf} = Object; | ||
|  | const {iterator, toStringTag} = Symbol; | ||
|  | 
 | ||
|  | const kindOf = (cache => thing => { | ||
|  |     const str = toString.call(thing); | ||
|  |     return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase()); | ||
|  | })(Object.create(null)); | ||
|  | 
 | ||
|  | const kindOfTest = (type) => { | ||
|  |   type = type.toLowerCase(); | ||
|  |   return (thing) => kindOf(thing) === type | ||
|  | }; | ||
|  | 
 | ||
|  | const typeOfTest = type => thing => typeof thing === type; | ||
|  | 
 | ||
|  | /** | ||
|  |  * Determine if a value is an Array | ||
|  |  * | ||
|  |  * @param {Object} val The value to test | ||
|  |  * | ||
|  |  * @returns {boolean} True if value is an Array, otherwise false | ||
|  |  */ | ||
|  | const {isArray} = Array; | ||
|  | 
 | ||
|  | /** | ||
|  |  * Determine if a value is undefined | ||
|  |  * | ||
|  |  * @param {*} val The value to test | ||
|  |  * | ||
|  |  * @returns {boolean} True if the value is undefined, otherwise false | ||
|  |  */ | ||
|  | const isUndefined = typeOfTest('undefined'); | ||
|  | 
 | ||
|  | /** | ||
|  |  * Determine if a value is a Buffer | ||
|  |  * | ||
|  |  * @param {*} val The value to test | ||
|  |  * | ||
|  |  * @returns {boolean} True if value is a Buffer, otherwise false | ||
|  |  */ | ||
|  | function isBuffer(val) { | ||
|  |   return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor) | ||
|  |     && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val); | ||
|  | } | ||
|  | 
 | ||
|  | /** | ||
|  |  * Determine if a value is an ArrayBuffer | ||
|  |  * | ||
|  |  * @param {*} val The value to test | ||
|  |  * | ||
|  |  * @returns {boolean} True if value is an ArrayBuffer, otherwise false | ||
|  |  */ | ||
|  | const isArrayBuffer = kindOfTest('ArrayBuffer'); | ||
|  | 
 | ||
|  | 
 | ||
|  | /** | ||
|  |  * Determine if a value is a view on an ArrayBuffer | ||
|  |  * | ||
|  |  * @param {*} val The value to test | ||
|  |  * | ||
|  |  * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false | ||
|  |  */ | ||
|  | function isArrayBufferView(val) { | ||
|  |   let result; | ||
|  |   if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) { | ||
|  |     result = ArrayBuffer.isView(val); | ||
|  |   } else { | ||
|  |     result = (val) && (val.buffer) && (isArrayBuffer(val.buffer)); | ||
|  |   } | ||
|  |   return result; | ||
|  | } | ||
|  | 
 | ||
|  | /** | ||
|  |  * Determine if a value is a String | ||
|  |  * | ||
|  |  * @param {*} val The value to test | ||
|  |  * | ||
|  |  * @returns {boolean} True if value is a String, otherwise false | ||
|  |  */ | ||
|  | const isString = typeOfTest('string'); | ||
|  | 
 | ||
|  | /** | ||
|  |  * Determine if a value is a Function | ||
|  |  * | ||
|  |  * @param {*} val The value to test | ||
|  |  * @returns {boolean} True if value is a Function, otherwise false | ||
|  |  */ | ||
|  | const isFunction = typeOfTest('function'); | ||
|  | 
 | ||
|  | /** | ||
|  |  * Determine if a value is a Number | ||
|  |  * | ||
|  |  * @param {*} val The value to test | ||
|  |  * | ||
|  |  * @returns {boolean} True if value is a Number, otherwise false | ||
|  |  */ | ||
|  | const isNumber = typeOfTest('number'); | ||
|  | 
 | ||
|  | /** | ||
|  |  * Determine if a value is an Object | ||
|  |  * | ||
|  |  * @param {*} thing The value to test | ||
|  |  * | ||
|  |  * @returns {boolean} True if value is an Object, otherwise false | ||
|  |  */ | ||
|  | const isObject = (thing) => thing !== null && typeof thing === 'object'; | ||
|  | 
 | ||
|  | /** | ||
|  |  * Determine if a value is a Boolean | ||
|  |  * | ||
|  |  * @param {*} thing The value to test | ||
|  |  * @returns {boolean} True if value is a Boolean, otherwise false | ||
|  |  */ | ||
|  | const isBoolean = thing => thing === true || thing === false; | ||
|  | 
 | ||
|  | /** | ||
|  |  * Determine if a value is a plain Object | ||
|  |  * | ||
|  |  * @param {*} val The value to test | ||
|  |  * | ||
|  |  * @returns {boolean} True if value is a plain Object, otherwise false | ||
|  |  */ | ||
|  | const isPlainObject = (val) => { | ||
|  |   if (kindOf(val) !== 'object') { | ||
|  |     return false; | ||
|  |   } | ||
|  | 
 | ||
|  |   const prototype = getPrototypeOf(val); | ||
|  |   return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(toStringTag in val) && !(iterator in val); | ||
|  | }; | ||
|  | 
 | ||
|  | /** | ||
|  |  * Determine if a value is a Date | ||
|  |  * | ||
|  |  * @param {*} val The value to test | ||
|  |  * | ||
|  |  * @returns {boolean} True if value is a Date, otherwise false | ||
|  |  */ | ||
|  | const isDate = kindOfTest('Date'); | ||
|  | 
 | ||
|  | /** | ||
|  |  * Determine if a value is a File | ||
|  |  * | ||
|  |  * @param {*} val The value to test | ||
|  |  * | ||
|  |  * @returns {boolean} True if value is a File, otherwise false | ||
|  |  */ | ||
|  | const isFile = kindOfTest('File'); | ||
|  | 
 | ||
|  | /** | ||
|  |  * Determine if a value is a Blob | ||
|  |  * | ||
|  |  * @param {*} val The value to test | ||
|  |  * | ||
|  |  * @returns {boolean} True if value is a Blob, otherwise false | ||
|  |  */ | ||
|  | const isBlob = kindOfTest('Blob'); | ||
|  | 
 | ||
|  | /** | ||
|  |  * Determine if a value is a FileList | ||
|  |  * | ||
|  |  * @param {*} val The value to test | ||
|  |  * | ||
|  |  * @returns {boolean} True if value is a File, otherwise false | ||
|  |  */ | ||
|  | const isFileList = kindOfTest('FileList'); | ||
|  | 
 | ||
|  | /** | ||
|  |  * Determine if a value is a Stream | ||
|  |  * | ||
|  |  * @param {*} val The value to test | ||
|  |  * | ||
|  |  * @returns {boolean} True if value is a Stream, otherwise false | ||
|  |  */ | ||
|  | const isStream = (val) => isObject(val) && isFunction(val.pipe); | ||
|  | 
 | ||
|  | /** | ||
|  |  * Determine if a value is a FormData | ||
|  |  * | ||
|  |  * @param {*} thing The value to test | ||
|  |  * | ||
|  |  * @returns {boolean} True if value is an FormData, otherwise false | ||
|  |  */ | ||
|  | const isFormData = (thing) => { | ||
|  |   let kind; | ||
|  |   return thing && ( | ||
|  |     (typeof FormData === 'function' && thing instanceof FormData) || ( | ||
|  |       isFunction(thing.append) && ( | ||
|  |         (kind = kindOf(thing)) === 'formdata' || | ||
|  |         // detect form-data instance
 | ||
|  |         (kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]') | ||
|  |       ) | ||
|  |     ) | ||
|  |   ) | ||
|  | }; | ||
|  | 
 | ||
|  | /** | ||
|  |  * Determine if a value is a URLSearchParams object | ||
|  |  * | ||
|  |  * @param {*} val The value to test | ||
|  |  * | ||
|  |  * @returns {boolean} True if value is a URLSearchParams object, otherwise false | ||
|  |  */ | ||
|  | const isURLSearchParams = kindOfTest('URLSearchParams'); | ||
|  | 
 | ||
|  | const [isReadableStream, isRequest, isResponse, isHeaders] = ['ReadableStream', 'Request', 'Response', 'Headers'].map(kindOfTest); | ||
|  | 
 | ||
|  | /** | ||
|  |  * Trim excess whitespace off the beginning and end of a string | ||
|  |  * | ||
|  |  * @param {String} str The String to trim | ||
|  |  * | ||
|  |  * @returns {String} The String freed of excess whitespace | ||
|  |  */ | ||
|  | const trim = (str) => str.trim ? | ||
|  |   str.trim() : str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); | ||
|  | 
 | ||
|  | /** | ||
|  |  * Iterate over an Array or an Object invoking a function for each item. | ||
|  |  * | ||
|  |  * If `obj` is an Array callback will be called passing | ||
|  |  * the value, index, and complete array for each item. | ||
|  |  * | ||
|  |  * If 'obj' is an Object callback will be called passing | ||
|  |  * the value, key, and complete object for each property. | ||
|  |  * | ||
|  |  * @param {Object|Array} obj The object to iterate | ||
|  |  * @param {Function} fn The callback to invoke for each item | ||
|  |  * | ||
|  |  * @param {Boolean} [allOwnKeys = false] | ||
|  |  * @returns {any} | ||
|  |  */ | ||
|  | function forEach(obj, fn, {allOwnKeys = false} = {}) { | ||
|  |   // Don't bother if no value provided
 | ||
|  |   if (obj === null || typeof obj === 'undefined') { | ||
|  |     return; | ||
|  |   } | ||
|  | 
 | ||
|  |   let i; | ||
|  |   let l; | ||
|  | 
 | ||
|  |   // Force an array if not already something iterable
 | ||
|  |   if (typeof obj !== 'object') { | ||
|  |     /*eslint no-param-reassign:0*/ | ||
|  |     obj = [obj]; | ||
|  |   } | ||
|  | 
 | ||
|  |   if (isArray(obj)) { | ||
|  |     // Iterate over array values
 | ||
|  |     for (i = 0, l = obj.length; i < l; i++) { | ||
|  |       fn.call(null, obj[i], i, obj); | ||
|  |     } | ||
|  |   } else { | ||
|  |     // Iterate over object keys
 | ||
|  |     const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj); | ||
|  |     const len = keys.length; | ||
|  |     let key; | ||
|  | 
 | ||
|  |     for (i = 0; i < len; i++) { | ||
|  |       key = keys[i]; | ||
|  |       fn.call(null, obj[key], key, obj); | ||
|  |     } | ||
|  |   } | ||
|  | } | ||
|  | 
 | ||
|  | function findKey(obj, key) { | ||
|  |   key = key.toLowerCase(); | ||
|  |   const keys = Object.keys(obj); | ||
|  |   let i = keys.length; | ||
|  |   let _key; | ||
|  |   while (i-- > 0) { | ||
|  |     _key = keys[i]; | ||
|  |     if (key === _key.toLowerCase()) { | ||
|  |       return _key; | ||
|  |     } | ||
|  |   } | ||
|  |   return null; | ||
|  | } | ||
|  | 
 | ||
|  | const _global = (() => { | ||
|  |   /*eslint no-undef:0*/ | ||
|  |   if (typeof globalThis !== "undefined") return globalThis; | ||
|  |   return typeof self !== "undefined" ? self : (typeof window !== 'undefined' ? window : global) | ||
|  | })(); | ||
|  | 
 | ||
|  | const isContextDefined = (context) => !isUndefined(context) && context !== _global; | ||
|  | 
 | ||
|  | /** | ||
|  |  * Accepts varargs expecting each argument to be an object, then | ||
|  |  * immutably merges the properties of each object and returns result. | ||
|  |  * | ||
|  |  * When multiple objects contain the same key the later object in | ||
|  |  * the arguments list will take precedence. | ||
|  |  * | ||
|  |  * Example: | ||
|  |  * | ||
|  |  * ```js
 | ||
|  |  * var result = merge({foo: 123}, {foo: 456}); | ||
|  |  * console.log(result.foo); // outputs 456
 | ||
|  |  * ```
 | ||
|  |  * | ||
|  |  * @param {Object} obj1 Object to merge | ||
|  |  * | ||
|  |  * @returns {Object} Result of all merge properties | ||
|  |  */ | ||
|  | function merge(/* obj1, obj2, obj3, ... */) { | ||
|  |   const {caseless} = isContextDefined(this) && this || {}; | ||
|  |   const result = {}; | ||
|  |   const assignValue = (val, key) => { | ||
|  |     const targetKey = caseless && findKey(result, key) || key; | ||
|  |     if (isPlainObject(result[targetKey]) && isPlainObject(val)) { | ||
|  |       result[targetKey] = merge(result[targetKey], val); | ||
|  |     } else if (isPlainObject(val)) { | ||
|  |       result[targetKey] = merge({}, val); | ||
|  |     } else if (isArray(val)) { | ||
|  |       result[targetKey] = val.slice(); | ||
|  |     } else { | ||
|  |       result[targetKey] = val; | ||
|  |     } | ||
|  |   }; | ||
|  | 
 | ||
|  |   for (let i = 0, l = arguments.length; i < l; i++) { | ||
|  |     arguments[i] && forEach(arguments[i], assignValue); | ||
|  |   } | ||
|  |   return result; | ||
|  | } | ||
|  | 
 | ||
|  | /** | ||
|  |  * Extends object a by mutably adding to it the properties of object b. | ||
|  |  * | ||
|  |  * @param {Object} a The object to be extended | ||
|  |  * @param {Object} b The object to copy properties from | ||
|  |  * @param {Object} thisArg The object to bind function to | ||
|  |  * | ||
|  |  * @param {Boolean} [allOwnKeys] | ||
|  |  * @returns {Object} The resulting value of object a | ||
|  |  */ | ||
|  | const extend = (a, b, thisArg, {allOwnKeys}= {}) => { | ||
|  |   forEach(b, (val, key) => { | ||
|  |     if (thisArg && isFunction(val)) { | ||
|  |       a[key] = bind(val, thisArg); | ||
|  |     } else { | ||
|  |       a[key] = val; | ||
|  |     } | ||
|  |   }, {allOwnKeys}); | ||
|  |   return a; | ||
|  | }; | ||
|  | 
 | ||
|  | /** | ||
|  |  * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM) | ||
|  |  * | ||
|  |  * @param {string} content with BOM | ||
|  |  * | ||
|  |  * @returns {string} content value without BOM | ||
|  |  */ | ||
|  | const stripBOM = (content) => { | ||
|  |   if (content.charCodeAt(0) === 0xFEFF) { | ||
|  |     content = content.slice(1); | ||
|  |   } | ||
|  |   return content; | ||
|  | }; | ||
|  | 
 | ||
|  | /** | ||
|  |  * Inherit the prototype methods from one constructor into another | ||
|  |  * @param {function} constructor | ||
|  |  * @param {function} superConstructor | ||
|  |  * @param {object} [props] | ||
|  |  * @param {object} [descriptors] | ||
|  |  * | ||
|  |  * @returns {void} | ||
|  |  */ | ||
|  | const inherits = (constructor, superConstructor, props, descriptors) => { | ||
|  |   constructor.prototype = Object.create(superConstructor.prototype, descriptors); | ||
|  |   constructor.prototype.constructor = constructor; | ||
|  |   Object.defineProperty(constructor, 'super', { | ||
|  |     value: superConstructor.prototype | ||
|  |   }); | ||
|  |   props && Object.assign(constructor.prototype, props); | ||
|  | }; | ||
|  | 
 | ||
|  | /** | ||
|  |  * Resolve object with deep prototype chain to a flat object | ||
|  |  * @param {Object} sourceObj source object | ||
|  |  * @param {Object} [destObj] | ||
|  |  * @param {Function|Boolean} [filter] | ||
|  |  * @param {Function} [propFilter] | ||
|  |  * | ||
|  |  * @returns {Object} | ||
|  |  */ | ||
|  | const toFlatObject = (sourceObj, destObj, filter, propFilter) => { | ||
|  |   let props; | ||
|  |   let i; | ||
|  |   let prop; | ||
|  |   const merged = {}; | ||
|  | 
 | ||
|  |   destObj = destObj || {}; | ||
|  |   // eslint-disable-next-line no-eq-null,eqeqeq
 | ||
|  |   if (sourceObj == null) return destObj; | ||
|  | 
 | ||
|  |   do { | ||
|  |     props = Object.getOwnPropertyNames(sourceObj); | ||
|  |     i = props.length; | ||
|  |     while (i-- > 0) { | ||
|  |       prop = props[i]; | ||
|  |       if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) { | ||
|  |         destObj[prop] = sourceObj[prop]; | ||
|  |         merged[prop] = true; | ||
|  |       } | ||
|  |     } | ||
|  |     sourceObj = filter !== false && getPrototypeOf(sourceObj); | ||
|  |   } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype); | ||
|  | 
 | ||
|  |   return destObj; | ||
|  | }; | ||
|  | 
 | ||
|  | /** | ||
|  |  * Determines whether a string ends with the characters of a specified string | ||
|  |  * | ||
|  |  * @param {String} str | ||
|  |  * @param {String} searchString | ||
|  |  * @param {Number} [position= 0] | ||
|  |  * | ||
|  |  * @returns {boolean} | ||
|  |  */ | ||
|  | const endsWith = (str, searchString, position) => { | ||
|  |   str = String(str); | ||
|  |   if (position === undefined || position > str.length) { | ||
|  |     position = str.length; | ||
|  |   } | ||
|  |   position -= searchString.length; | ||
|  |   const lastIndex = str.indexOf(searchString, position); | ||
|  |   return lastIndex !== -1 && lastIndex === position; | ||
|  | }; | ||
|  | 
 | ||
|  | 
 | ||
|  | /** | ||
|  |  * Returns new array from array like object or null if failed | ||
|  |  * | ||
|  |  * @param {*} [thing] | ||
|  |  * | ||
|  |  * @returns {?Array} | ||
|  |  */ | ||
|  | const toArray = (thing) => { | ||
|  |   if (!thing) return null; | ||
|  |   if (isArray(thing)) return thing; | ||
|  |   let i = thing.length; | ||
|  |   if (!isNumber(i)) return null; | ||
|  |   const arr = new Array(i); | ||
|  |   while (i-- > 0) { | ||
|  |     arr[i] = thing[i]; | ||
|  |   } | ||
|  |   return arr; | ||
|  | }; | ||
|  | 
 | ||
|  | /** | ||
|  |  * Checking if the Uint8Array exists and if it does, it returns a function that checks if the | ||
|  |  * thing passed in is an instance of Uint8Array | ||
|  |  * | ||
|  |  * @param {TypedArray} | ||
|  |  * | ||
|  |  * @returns {Array} | ||
|  |  */ | ||
|  | // eslint-disable-next-line func-names
 | ||
|  | const isTypedArray = (TypedArray => { | ||
|  |   // eslint-disable-next-line func-names
 | ||
|  |   return thing => { | ||
|  |     return TypedArray && thing instanceof TypedArray; | ||
|  |   }; | ||
|  | })(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array)); | ||
|  | 
 | ||
|  | /** | ||
|  |  * For each entry in the object, call the function with the key and value. | ||
|  |  * | ||
|  |  * @param {Object<any, any>} obj - The object to iterate over. | ||
|  |  * @param {Function} fn - The function to call for each entry. | ||
|  |  * | ||
|  |  * @returns {void} | ||
|  |  */ | ||
|  | const forEachEntry = (obj, fn) => { | ||
|  |   const generator = obj && obj[iterator]; | ||
|  | 
 | ||
|  |   const _iterator = generator.call(obj); | ||
|  | 
 | ||
|  |   let result; | ||
|  | 
 | ||
|  |   while ((result = _iterator.next()) && !result.done) { | ||
|  |     const pair = result.value; | ||
|  |     fn.call(obj, pair[0], pair[1]); | ||
|  |   } | ||
|  | }; | ||
|  | 
 | ||
|  | /** | ||
|  |  * It takes a regular expression and a string, and returns an array of all the matches | ||
|  |  * | ||
|  |  * @param {string} regExp - The regular expression to match against. | ||
|  |  * @param {string} str - The string to search. | ||
|  |  * | ||
|  |  * @returns {Array<boolean>} | ||
|  |  */ | ||
|  | const matchAll = (regExp, str) => { | ||
|  |   let matches; | ||
|  |   const arr = []; | ||
|  | 
 | ||
|  |   while ((matches = regExp.exec(str)) !== null) { | ||
|  |     arr.push(matches); | ||
|  |   } | ||
|  | 
 | ||
|  |   return arr; | ||
|  | }; | ||
|  | 
 | ||
|  | /* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */ | ||
|  | const isHTMLForm = kindOfTest('HTMLFormElement'); | ||
|  | 
 | ||
|  | const toCamelCase = str => { | ||
|  |   return str.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g, | ||
|  |     function replacer(m, p1, p2) { | ||
|  |       return p1.toUpperCase() + p2; | ||
|  |     } | ||
|  |   ); | ||
|  | }; | ||
|  | 
 | ||
|  | /* Creating a function that will check if an object has a property. */ | ||
|  | const hasOwnProperty = (({hasOwnProperty}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype); | ||
|  | 
 | ||
|  | /** | ||
|  |  * Determine if a value is a RegExp object | ||
|  |  * | ||
|  |  * @param {*} val The value to test | ||
|  |  * | ||
|  |  * @returns {boolean} True if value is a RegExp object, otherwise false | ||
|  |  */ | ||
|  | const isRegExp = kindOfTest('RegExp'); | ||
|  | 
 | ||
|  | const reduceDescriptors = (obj, reducer) => { | ||
|  |   const descriptors = Object.getOwnPropertyDescriptors(obj); | ||
|  |   const reducedDescriptors = {}; | ||
|  | 
 | ||
|  |   forEach(descriptors, (descriptor, name) => { | ||
|  |     let ret; | ||
|  |     if ((ret = reducer(descriptor, name, obj)) !== false) { | ||
|  |       reducedDescriptors[name] = ret || descriptor; | ||
|  |     } | ||
|  |   }); | ||
|  | 
 | ||
|  |   Object.defineProperties(obj, reducedDescriptors); | ||
|  | }; | ||
|  | 
 | ||
|  | /** | ||
|  |  * Makes all methods read-only | ||
|  |  * @param {Object} obj | ||
|  |  */ | ||
|  | 
 | ||
|  | const freezeMethods = (obj) => { | ||
|  |   reduceDescriptors(obj, (descriptor, name) => { | ||
|  |     // skip restricted props in strict mode
 | ||
|  |     if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) { | ||
|  |       return false; | ||
|  |     } | ||
|  | 
 | ||
|  |     const value = obj[name]; | ||
|  | 
 | ||
|  |     if (!isFunction(value)) return; | ||
|  | 
 | ||
|  |     descriptor.enumerable = false; | ||
|  | 
 | ||
|  |     if ('writable' in descriptor) { | ||
|  |       descriptor.writable = false; | ||
|  |       return; | ||
|  |     } | ||
|  | 
 | ||
|  |     if (!descriptor.set) { | ||
|  |       descriptor.set = () => { | ||
|  |         throw Error('Can not rewrite read-only method \'' + name + '\''); | ||
|  |       }; | ||
|  |     } | ||
|  |   }); | ||
|  | }; | ||
|  | 
 | ||
|  | const toObjectSet = (arrayOrString, delimiter) => { | ||
|  |   const obj = {}; | ||
|  | 
 | ||
|  |   const define = (arr) => { | ||
|  |     arr.forEach(value => { | ||
|  |       obj[value] = true; | ||
|  |     }); | ||
|  |   }; | ||
|  | 
 | ||
|  |   isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter)); | ||
|  | 
 | ||
|  |   return obj; | ||
|  | }; | ||
|  | 
 | ||
|  | const noop = () => {}; | ||
|  | 
 | ||
|  | const toFiniteNumber = (value, defaultValue) => { | ||
|  |   return value != null && Number.isFinite(value = +value) ? value : defaultValue; | ||
|  | }; | ||
|  | 
 | ||
|  | /** | ||
|  |  * If the thing is a FormData object, return true, otherwise return false. | ||
|  |  * | ||
|  |  * @param {unknown} thing - The thing to check. | ||
|  |  * | ||
|  |  * @returns {boolean} | ||
|  |  */ | ||
|  | function isSpecCompliantForm(thing) { | ||
|  |   return !!(thing && isFunction(thing.append) && thing[toStringTag] === 'FormData' && thing[iterator]); | ||
|  | } | ||
|  | 
 | ||
|  | const toJSONObject = (obj) => { | ||
|  |   const stack = new Array(10); | ||
|  | 
 | ||
|  |   const visit = (source, i) => { | ||
|  | 
 | ||
|  |     if (isObject(source)) { | ||
|  |       if (stack.indexOf(source) >= 0) { | ||
|  |         return; | ||
|  |       } | ||
|  | 
 | ||
|  |       if(!('toJSON' in source)) { | ||
|  |         stack[i] = source; | ||
|  |         const target = isArray(source) ? [] : {}; | ||
|  | 
 | ||
|  |         forEach(source, (value, key) => { | ||
|  |           const reducedValue = visit(value, i + 1); | ||
|  |           !isUndefined(reducedValue) && (target[key] = reducedValue); | ||
|  |         }); | ||
|  | 
 | ||
|  |         stack[i] = undefined; | ||
|  | 
 | ||
|  |         return target; | ||
|  |       } | ||
|  |     } | ||
|  | 
 | ||
|  |     return source; | ||
|  |   }; | ||
|  | 
 | ||
|  |   return visit(obj, 0); | ||
|  | }; | ||
|  | 
 | ||
|  | const isAsyncFn = kindOfTest('AsyncFunction'); | ||
|  | 
 | ||
|  | const isThenable = (thing) => | ||
|  |   thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch); | ||
|  | 
 | ||
|  | // original code
 | ||
|  | // https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34
 | ||
|  | 
 | ||
|  | const _setImmediate = ((setImmediateSupported, postMessageSupported) => { | ||
|  |   if (setImmediateSupported) { | ||
|  |     return setImmediate; | ||
|  |   } | ||
|  | 
 | ||
|  |   return postMessageSupported ? ((token, callbacks) => { | ||
|  |     _global.addEventListener("message", ({source, data}) => { | ||
|  |       if (source === _global && data === token) { | ||
|  |         callbacks.length && callbacks.shift()(); | ||
|  |       } | ||
|  |     }, false); | ||
|  | 
 | ||
|  |     return (cb) => { | ||
|  |       callbacks.push(cb); | ||
|  |       _global.postMessage(token, "*"); | ||
|  |     } | ||
|  |   })(`axios@${Math.random()}`, []) : (cb) => setTimeout(cb); | ||
|  | })( | ||
|  |   typeof setImmediate === 'function', | ||
|  |   isFunction(_global.postMessage) | ||
|  | ); | ||
|  | 
 | ||
|  | const asap = typeof queueMicrotask !== 'undefined' ? | ||
|  |   queueMicrotask.bind(_global) : ( typeof process !== 'undefined' && process.nextTick || _setImmediate); | ||
|  | 
 | ||
|  | // *********************
 | ||
|  | 
 | ||
|  | 
 | ||
|  | const isIterable = (thing) => thing != null && isFunction(thing[iterator]); | ||
|  | 
 | ||
|  | 
 | ||
|  | const utils$1 = { | ||
|  |   isArray, | ||
|  |   isArrayBuffer, | ||
|  |   isBuffer, | ||
|  |   isFormData, | ||
|  |   isArrayBufferView, | ||
|  |   isString, | ||
|  |   isNumber, | ||
|  |   isBoolean, | ||
|  |   isObject, | ||
|  |   isPlainObject, | ||
|  |   isReadableStream, | ||
|  |   isRequest, | ||
|  |   isResponse, | ||
|  |   isHeaders, | ||
|  |   isUndefined, | ||
|  |   isDate, | ||
|  |   isFile, | ||
|  |   isBlob, | ||
|  |   isRegExp, | ||
|  |   isFunction, | ||
|  |   isStream, | ||
|  |   isURLSearchParams, | ||
|  |   isTypedArray, | ||
|  |   isFileList, | ||
|  |   forEach, | ||
|  |   merge, | ||
|  |   extend, | ||
|  |   trim, | ||
|  |   stripBOM, | ||
|  |   inherits, | ||
|  |   toFlatObject, | ||
|  |   kindOf, | ||
|  |   kindOfTest, | ||
|  |   endsWith, | ||
|  |   toArray, | ||
|  |   forEachEntry, | ||
|  |   matchAll, | ||
|  |   isHTMLForm, | ||
|  |   hasOwnProperty, | ||
|  |   hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection
 | ||
|  |   reduceDescriptors, | ||
|  |   freezeMethods, | ||
|  |   toObjectSet, | ||
|  |   toCamelCase, | ||
|  |   noop, | ||
|  |   toFiniteNumber, | ||
|  |   findKey, | ||
|  |   global: _global, | ||
|  |   isContextDefined, | ||
|  |   isSpecCompliantForm, | ||
|  |   toJSONObject, | ||
|  |   isAsyncFn, | ||
|  |   isThenable, | ||
|  |   setImmediate: _setImmediate, | ||
|  |   asap, | ||
|  |   isIterable | ||
|  | }; | ||
|  | 
 | ||
|  | /** | ||
|  |  * Create an Error with the specified message, config, error code, request and response. | ||
|  |  * | ||
|  |  * @param {string} message The error message. | ||
|  |  * @param {string} [code] The error code (for example, 'ECONNABORTED'). | ||
|  |  * @param {Object} [config] The config. | ||
|  |  * @param {Object} [request] The request. | ||
|  |  * @param {Object} [response] The response. | ||
|  |  * | ||
|  |  * @returns {Error} The created error. | ||
|  |  */ | ||
|  | function AxiosError$1(message, code, config, request, response) { | ||
|  |   Error.call(this); | ||
|  | 
 | ||
|  |   if (Error.captureStackTrace) { | ||
|  |     Error.captureStackTrace(this, this.constructor); | ||
|  |   } else { | ||
|  |     this.stack = (new Error()).stack; | ||
|  |   } | ||
|  | 
 | ||
|  |   this.message = message; | ||
|  |   this.name = 'AxiosError'; | ||
|  |   code && (this.code = code); | ||
|  |   config && (this.config = config); | ||
|  |   request && (this.request = request); | ||
|  |   if (response) { | ||
|  |     this.response = response; | ||
|  |     this.status = response.status ? response.status : null; | ||
|  |   } | ||
|  | } | ||
|  | 
 | ||
|  | utils$1.inherits(AxiosError$1, Error, { | ||
|  |   toJSON: function toJSON() { | ||
|  |     return { | ||
|  |       // Standard
 | ||
|  |       message: this.message, | ||
|  |       name: this.name, | ||
|  |       // Microsoft
 | ||
|  |       description: this.description, | ||
|  |       number: this.number, | ||
|  |       // Mozilla
 | ||
|  |       fileName: this.fileName, | ||
|  |       lineNumber: this.lineNumber, | ||
|  |       columnNumber: this.columnNumber, | ||
|  |       stack: this.stack, | ||
|  |       // Axios
 | ||
|  |       config: utils$1.toJSONObject(this.config), | ||
|  |       code: this.code, | ||
|  |       status: this.status | ||
|  |     }; | ||
|  |   } | ||
|  | }); | ||
|  | 
 | ||
|  | const prototype$1 = AxiosError$1.prototype; | ||
|  | const descriptors = {}; | ||
|  | 
 | ||
|  | [ | ||
|  |   'ERR_BAD_OPTION_VALUE', | ||
|  |   'ERR_BAD_OPTION', | ||
|  |   'ECONNABORTED', | ||
|  |   'ETIMEDOUT', | ||
|  |   'ERR_NETWORK', | ||
|  |   'ERR_FR_TOO_MANY_REDIRECTS', | ||
|  |   'ERR_DEPRECATED', | ||
|  |   'ERR_BAD_RESPONSE', | ||
|  |   'ERR_BAD_REQUEST', | ||
|  |   'ERR_CANCELED', | ||
|  |   'ERR_NOT_SUPPORT', | ||
|  |   'ERR_INVALID_URL' | ||
|  | // eslint-disable-next-line func-names
 | ||
|  | ].forEach(code => { | ||
|  |   descriptors[code] = {value: code}; | ||
|  | }); | ||
|  | 
 | ||
|  | Object.defineProperties(AxiosError$1, descriptors); | ||
|  | Object.defineProperty(prototype$1, 'isAxiosError', {value: true}); | ||
|  | 
 | ||
|  | // eslint-disable-next-line func-names
 | ||
|  | AxiosError$1.from = (error, code, config, request, response, customProps) => { | ||
|  |   const axiosError = Object.create(prototype$1); | ||
|  | 
 | ||
|  |   utils$1.toFlatObject(error, axiosError, function filter(obj) { | ||
|  |     return obj !== Error.prototype; | ||
|  |   }, prop => { | ||
|  |     return prop !== 'isAxiosError'; | ||
|  |   }); | ||
|  | 
 | ||
|  |   AxiosError$1.call(axiosError, error.message, code, config, request, response); | ||
|  | 
 | ||
|  |   axiosError.cause = error; | ||
|  | 
 | ||
|  |   axiosError.name = error.name; | ||
|  | 
 | ||
|  |   customProps && Object.assign(axiosError, customProps); | ||
|  | 
 | ||
|  |   return axiosError; | ||
|  | }; | ||
|  | 
 | ||
|  | // eslint-disable-next-line strict
 | ||
|  | const httpAdapter = null; | ||
|  | 
 | ||
|  | /** | ||
|  |  * Determines if the given thing is a array or js object. | ||
|  |  * | ||
|  |  * @param {string} thing - The object or array to be visited. | ||
|  |  * | ||
|  |  * @returns {boolean} | ||
|  |  */ | ||
|  | function isVisitable(thing) { | ||
|  |   return utils$1.isPlainObject(thing) || utils$1.isArray(thing); | ||
|  | } | ||
|  | 
 | ||
|  | /** | ||
|  |  * It removes the brackets from the end of a string | ||
|  |  * | ||
|  |  * @param {string} key - The key of the parameter. | ||
|  |  * | ||
|  |  * @returns {string} the key without the brackets. | ||
|  |  */ | ||
|  | function removeBrackets(key) { | ||
|  |   return utils$1.endsWith(key, '[]') ? key.slice(0, -2) : key; | ||
|  | } | ||
|  | 
 | ||
|  | /** | ||
|  |  * It takes a path, a key, and a boolean, and returns a string | ||
|  |  * | ||
|  |  * @param {string} path - The path to the current key. | ||
|  |  * @param {string} key - The key of the current object being iterated over. | ||
|  |  * @param {string} dots - If true, the key will be rendered with dots instead of brackets. | ||
|  |  * | ||
|  |  * @returns {string} The path to the current key. | ||
|  |  */ | ||
|  | function renderKey(path, key, dots) { | ||
|  |   if (!path) return key; | ||
|  |   return path.concat(key).map(function each(token, i) { | ||
|  |     // eslint-disable-next-line no-param-reassign
 | ||
|  |     token = removeBrackets(token); | ||
|  |     return !dots && i ? '[' + token + ']' : token; | ||
|  |   }).join(dots ? '.' : ''); | ||
|  | } | ||
|  | 
 | ||
|  | /** | ||
|  |  * If the array is an array and none of its elements are visitable, then it's a flat array. | ||
|  |  * | ||
|  |  * @param {Array<any>} arr - The array to check | ||
|  |  * | ||
|  |  * @returns {boolean} | ||
|  |  */ | ||
|  | function isFlatArray(arr) { | ||
|  |   return utils$1.isArray(arr) && !arr.some(isVisitable); | ||
|  | } | ||
|  | 
 | ||
|  | const predicates = utils$1.toFlatObject(utils$1, {}, null, function filter(prop) { | ||
|  |   return /^is[A-Z]/.test(prop); | ||
|  | }); | ||
|  | 
 | ||
|  | /** | ||
|  |  * Convert a data object to FormData | ||
|  |  * | ||
|  |  * @param {Object} obj | ||
|  |  * @param {?Object} [formData] | ||
|  |  * @param {?Object} [options] | ||
|  |  * @param {Function} [options.visitor] | ||
|  |  * @param {Boolean} [options.metaTokens = true] | ||
|  |  * @param {Boolean} [options.dots = false] | ||
|  |  * @param {?Boolean} [options.indexes = false] | ||
|  |  * | ||
|  |  * @returns {Object} | ||
|  |  **/ | ||
|  | 
 | ||
|  | /** | ||
|  |  * It converts an object into a FormData object | ||
|  |  * | ||
|  |  * @param {Object<any, any>} obj - The object to convert to form data. | ||
|  |  * @param {string} formData - The FormData object to append to. | ||
|  |  * @param {Object<string, any>} options | ||
|  |  * | ||
|  |  * @returns | ||
|  |  */ | ||
|  | function toFormData$1(obj, formData, options) { | ||
|  |   if (!utils$1.isObject(obj)) { | ||
|  |     throw new TypeError('target must be an object'); | ||
|  |   } | ||
|  | 
 | ||
|  |   // eslint-disable-next-line no-param-reassign
 | ||
|  |   formData = formData || new (FormData)(); | ||
|  | 
 | ||
|  |   // eslint-disable-next-line no-param-reassign
 | ||
|  |   options = utils$1.toFlatObject(options, { | ||
|  |     metaTokens: true, | ||
|  |     dots: false, | ||
|  |     indexes: false | ||
|  |   }, false, function defined(option, source) { | ||
|  |     // eslint-disable-next-line no-eq-null,eqeqeq
 | ||
|  |     return !utils$1.isUndefined(source[option]); | ||
|  |   }); | ||
|  | 
 | ||
|  |   const metaTokens = options.metaTokens; | ||
|  |   // eslint-disable-next-line no-use-before-define
 | ||
|  |   const visitor = options.visitor || defaultVisitor; | ||
|  |   const dots = options.dots; | ||
|  |   const indexes = options.indexes; | ||
|  |   const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob; | ||
|  |   const useBlob = _Blob && utils$1.isSpecCompliantForm(formData); | ||
|  | 
 | ||
|  |   if (!utils$1.isFunction(visitor)) { | ||
|  |     throw new TypeError('visitor must be a function'); | ||
|  |   } | ||
|  | 
 | ||
|  |   function convertValue(value) { | ||
|  |     if (value === null) return ''; | ||
|  | 
 | ||
|  |     if (utils$1.isDate(value)) { | ||
|  |       return value.toISOString(); | ||
|  |     } | ||
|  | 
 | ||
|  |     if (!useBlob && utils$1.isBlob(value)) { | ||
|  |       throw new AxiosError$1('Blob is not supported. Use a Buffer instead.'); | ||
|  |     } | ||
|  | 
 | ||
|  |     if (utils$1.isArrayBuffer(value) || utils$1.isTypedArray(value)) { | ||
|  |       return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value); | ||
|  |     } | ||
|  | 
 | ||
|  |     return value; | ||
|  |   } | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Default visitor. | ||
|  |    * | ||
|  |    * @param {*} value | ||
|  |    * @param {String|Number} key | ||
|  |    * @param {Array<String|Number>} path | ||
|  |    * @this {FormData} | ||
|  |    * | ||
|  |    * @returns {boolean} return true to visit the each prop of the value recursively | ||
|  |    */ | ||
|  |   function defaultVisitor(value, key, path) { | ||
|  |     let arr = value; | ||
|  | 
 | ||
|  |     if (value && !path && typeof value === 'object') { | ||
|  |       if (utils$1.endsWith(key, '{}')) { | ||
|  |         // eslint-disable-next-line no-param-reassign
 | ||
|  |         key = metaTokens ? key : key.slice(0, -2); | ||
|  |         // eslint-disable-next-line no-param-reassign
 | ||
|  |         value = JSON.stringify(value); | ||
|  |       } else if ( | ||
|  |         (utils$1.isArray(value) && isFlatArray(value)) || | ||
|  |         ((utils$1.isFileList(value) || utils$1.endsWith(key, '[]')) && (arr = utils$1.toArray(value)) | ||
|  |         )) { | ||
|  |         // eslint-disable-next-line no-param-reassign
 | ||
|  |         key = removeBrackets(key); | ||
|  | 
 | ||
|  |         arr.forEach(function each(el, index) { | ||
|  |           !(utils$1.isUndefined(el) || el === null) && formData.append( | ||
|  |             // eslint-disable-next-line no-nested-ternary
 | ||
|  |             indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'), | ||
|  |             convertValue(el) | ||
|  |           ); | ||
|  |         }); | ||
|  |         return false; | ||
|  |       } | ||
|  |     } | ||
|  | 
 | ||
|  |     if (isVisitable(value)) { | ||
|  |       return true; | ||
|  |     } | ||
|  | 
 | ||
|  |     formData.append(renderKey(path, key, dots), convertValue(value)); | ||
|  | 
 | ||
|  |     return false; | ||
|  |   } | ||
|  | 
 | ||
|  |   const stack = []; | ||
|  | 
 | ||
|  |   const exposedHelpers = Object.assign(predicates, { | ||
|  |     defaultVisitor, | ||
|  |     convertValue, | ||
|  |     isVisitable | ||
|  |   }); | ||
|  | 
 | ||
|  |   function build(value, path) { | ||
|  |     if (utils$1.isUndefined(value)) return; | ||
|  | 
 | ||
|  |     if (stack.indexOf(value) !== -1) { | ||
|  |       throw Error('Circular reference detected in ' + path.join('.')); | ||
|  |     } | ||
|  | 
 | ||
|  |     stack.push(value); | ||
|  | 
 | ||
|  |     utils$1.forEach(value, function each(el, key) { | ||
|  |       const result = !(utils$1.isUndefined(el) || el === null) && visitor.call( | ||
|  |         formData, el, utils$1.isString(key) ? key.trim() : key, path, exposedHelpers | ||
|  |       ); | ||
|  | 
 | ||
|  |       if (result === true) { | ||
|  |         build(el, path ? path.concat(key) : [key]); | ||
|  |       } | ||
|  |     }); | ||
|  | 
 | ||
|  |     stack.pop(); | ||
|  |   } | ||
|  | 
 | ||
|  |   if (!utils$1.isObject(obj)) { | ||
|  |     throw new TypeError('data must be an object'); | ||
|  |   } | ||
|  | 
 | ||
|  |   build(obj); | ||
|  | 
 | ||
|  |   return formData; | ||
|  | } | ||
|  | 
 | ||
|  | /** | ||
|  |  * It encodes a string by replacing all characters that are not in the unreserved set with | ||
|  |  * their percent-encoded equivalents | ||
|  |  * | ||
|  |  * @param {string} str - The string to encode. | ||
|  |  * | ||
|  |  * @returns {string} The encoded string. | ||
|  |  */ | ||
|  | function encode$1(str) { | ||
|  |   const charMap = { | ||
|  |     '!': '%21', | ||
|  |     "'": '%27', | ||
|  |     '(': '%28', | ||
|  |     ')': '%29', | ||
|  |     '~': '%7E', | ||
|  |     '%20': '+', | ||
|  |     '%00': '\x00' | ||
|  |   }; | ||
|  |   return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) { | ||
|  |     return charMap[match]; | ||
|  |   }); | ||
|  | } | ||
|  | 
 | ||
|  | /** | ||
|  |  * It takes a params object and converts it to a FormData object | ||
|  |  * | ||
|  |  * @param {Object<string, any>} params - The parameters to be converted to a FormData object. | ||
|  |  * @param {Object<string, any>} options - The options object passed to the Axios constructor. | ||
|  |  * | ||
|  |  * @returns {void} | ||
|  |  */ | ||
|  | function AxiosURLSearchParams(params, options) { | ||
|  |   this._pairs = []; | ||
|  | 
 | ||
|  |   params && toFormData$1(params, this, options); | ||
|  | } | ||
|  | 
 | ||
|  | const prototype = AxiosURLSearchParams.prototype; | ||
|  | 
 | ||
|  | prototype.append = function append(name, value) { | ||
|  |   this._pairs.push([name, value]); | ||
|  | }; | ||
|  | 
 | ||
|  | prototype.toString = function toString(encoder) { | ||
|  |   const _encode = encoder ? function(value) { | ||
|  |     return encoder.call(this, value, encode$1); | ||
|  |   } : encode$1; | ||
|  | 
 | ||
|  |   return this._pairs.map(function each(pair) { | ||
|  |     return _encode(pair[0]) + '=' + _encode(pair[1]); | ||
|  |   }, '').join('&'); | ||
|  | }; | ||
|  | 
 | ||
|  | /** | ||
|  |  * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their | ||
|  |  * URI encoded counterparts | ||
|  |  * | ||
|  |  * @param {string} val The value to be encoded. | ||
|  |  * | ||
|  |  * @returns {string} The encoded value. | ||
|  |  */ | ||
|  | function encode(val) { | ||
|  |   return encodeURIComponent(val). | ||
|  |     replace(/%3A/gi, ':'). | ||
|  |     replace(/%24/g, '$'). | ||
|  |     replace(/%2C/gi, ','). | ||
|  |     replace(/%20/g, '+'). | ||
|  |     replace(/%5B/gi, '['). | ||
|  |     replace(/%5D/gi, ']'); | ||
|  | } | ||
|  | 
 | ||
|  | /** | ||
|  |  * Build a URL by appending params to the end | ||
|  |  * | ||
|  |  * @param {string} url The base of the url (e.g., http://www.google.com)
 | ||
|  |  * @param {object} [params] The params to be appended | ||
|  |  * @param {?(object|Function)} options | ||
|  |  * | ||
|  |  * @returns {string} The formatted url | ||
|  |  */ | ||
|  | function buildURL(url, params, options) { | ||
|  |   /*eslint no-param-reassign:0*/ | ||
|  |   if (!params) { | ||
|  |     return url; | ||
|  |   } | ||
|  |    | ||
|  |   const _encode = options && options.encode || encode; | ||
|  | 
 | ||
|  |   if (utils$1.isFunction(options)) { | ||
|  |     options = { | ||
|  |       serialize: options | ||
|  |     }; | ||
|  |   }  | ||
|  | 
 | ||
|  |   const serializeFn = options && options.serialize; | ||
|  | 
 | ||
|  |   let serializedParams; | ||
|  | 
 | ||
|  |   if (serializeFn) { | ||
|  |     serializedParams = serializeFn(params, options); | ||
|  |   } else { | ||
|  |     serializedParams = utils$1.isURLSearchParams(params) ? | ||
|  |       params.toString() : | ||
|  |       new AxiosURLSearchParams(params, options).toString(_encode); | ||
|  |   } | ||
|  | 
 | ||
|  |   if (serializedParams) { | ||
|  |     const hashmarkIndex = url.indexOf("#"); | ||
|  | 
 | ||
|  |     if (hashmarkIndex !== -1) { | ||
|  |       url = url.slice(0, hashmarkIndex); | ||
|  |     } | ||
|  |     url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams; | ||
|  |   } | ||
|  | 
 | ||
|  |   return url; | ||
|  | } | ||
|  | 
 | ||
|  | class InterceptorManager { | ||
|  |   constructor() { | ||
|  |     this.handlers = []; | ||
|  |   } | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Add a new interceptor to the stack | ||
|  |    * | ||
|  |    * @param {Function} fulfilled The function to handle `then` for a `Promise` | ||
|  |    * @param {Function} rejected The function to handle `reject` for a `Promise` | ||
|  |    * | ||
|  |    * @return {Number} An ID used to remove interceptor later | ||
|  |    */ | ||
|  |   use(fulfilled, rejected, options) { | ||
|  |     this.handlers.push({ | ||
|  |       fulfilled, | ||
|  |       rejected, | ||
|  |       synchronous: options ? options.synchronous : false, | ||
|  |       runWhen: options ? options.runWhen : null | ||
|  |     }); | ||
|  |     return this.handlers.length - 1; | ||
|  |   } | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Remove an interceptor from the stack | ||
|  |    * | ||
|  |    * @param {Number} id The ID that was returned by `use` | ||
|  |    * | ||
|  |    * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise | ||
|  |    */ | ||
|  |   eject(id) { | ||
|  |     if (this.handlers[id]) { | ||
|  |       this.handlers[id] = null; | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Clear all interceptors from the stack | ||
|  |    * | ||
|  |    * @returns {void} | ||
|  |    */ | ||
|  |   clear() { | ||
|  |     if (this.handlers) { | ||
|  |       this.handlers = []; | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Iterate over all the registered interceptors | ||
|  |    * | ||
|  |    * This method is particularly useful for skipping over any | ||
|  |    * interceptors that may have become `null` calling `eject`. | ||
|  |    * | ||
|  |    * @param {Function} fn The function to call for each interceptor | ||
|  |    * | ||
|  |    * @returns {void} | ||
|  |    */ | ||
|  |   forEach(fn) { | ||
|  |     utils$1.forEach(this.handlers, function forEachHandler(h) { | ||
|  |       if (h !== null) { | ||
|  |         fn(h); | ||
|  |       } | ||
|  |     }); | ||
|  |   } | ||
|  | } | ||
|  | 
 | ||
|  | const InterceptorManager$1 = InterceptorManager; | ||
|  | 
 | ||
|  | const transitionalDefaults = { | ||
|  |   silentJSONParsing: true, | ||
|  |   forcedJSONParsing: true, | ||
|  |   clarifyTimeoutError: false | ||
|  | }; | ||
|  | 
 | ||
|  | const URLSearchParams$1 = typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams; | ||
|  | 
 | ||
|  | const FormData$1 = typeof FormData !== 'undefined' ? FormData : null; | ||
|  | 
 | ||
|  | const Blob$1 = typeof Blob !== 'undefined' ? Blob : null; | ||
|  | 
 | ||
|  | const platform$1 = { | ||
|  |   isBrowser: true, | ||
|  |   classes: { | ||
|  |     URLSearchParams: URLSearchParams$1, | ||
|  |     FormData: FormData$1, | ||
|  |     Blob: Blob$1 | ||
|  |   }, | ||
|  |   protocols: ['http', 'https', 'file', 'blob', 'url', 'data'] | ||
|  | }; | ||
|  | 
 | ||
|  | const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined'; | ||
|  | 
 | ||
|  | const _navigator = typeof navigator === 'object' && navigator || undefined; | ||
|  | 
 | ||
|  | /** | ||
|  |  * Determine if we're running in a standard browser environment | ||
|  |  * | ||
|  |  * This allows axios to run in a web worker, and react-native. | ||
|  |  * Both environments support XMLHttpRequest, but not fully standard globals. | ||
|  |  * | ||
|  |  * web workers: | ||
|  |  *  typeof window -> undefined | ||
|  |  *  typeof document -> undefined | ||
|  |  * | ||
|  |  * react-native: | ||
|  |  *  navigator.product -> 'ReactNative' | ||
|  |  * nativescript | ||
|  |  *  navigator.product -> 'NativeScript' or 'NS' | ||
|  |  * | ||
|  |  * @returns {boolean} | ||
|  |  */ | ||
|  | const hasStandardBrowserEnv = hasBrowserEnv && | ||
|  |   (!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0); | ||
|  | 
 | ||
|  | /** | ||
|  |  * Determine if we're running in a standard browser webWorker environment | ||
|  |  * | ||
|  |  * Although the `isStandardBrowserEnv` method indicates that | ||
|  |  * `allows axios to run in a web worker`, the WebWorker will still be | ||
|  |  * filtered out due to its judgment standard | ||
|  |  * `typeof window !== 'undefined' && typeof document !== 'undefined'`. | ||
|  |  * This leads to a problem when axios post `FormData` in webWorker | ||
|  |  */ | ||
|  | const hasStandardBrowserWebWorkerEnv = (() => { | ||
|  |   return ( | ||
|  |     typeof WorkerGlobalScope !== 'undefined' && | ||
|  |     // eslint-disable-next-line no-undef
 | ||
|  |     self instanceof WorkerGlobalScope && | ||
|  |     typeof self.importScripts === 'function' | ||
|  |   ); | ||
|  | })(); | ||
|  | 
 | ||
|  | const origin = hasBrowserEnv && window.location.href || 'http://localhost'; | ||
|  | 
 | ||
|  | const utils = /*#__PURE__*/Object.freeze({ | ||
|  |   __proto__: null, | ||
|  |   hasBrowserEnv: hasBrowserEnv, | ||
|  |   hasStandardBrowserWebWorkerEnv: hasStandardBrowserWebWorkerEnv, | ||
|  |   hasStandardBrowserEnv: hasStandardBrowserEnv, | ||
|  |   navigator: _navigator, | ||
|  |   origin: origin | ||
|  | }); | ||
|  | 
 | ||
|  | const platform = { | ||
|  |   ...utils, | ||
|  |   ...platform$1 | ||
|  | }; | ||
|  | 
 | ||
|  | function toURLEncodedForm(data, options) { | ||
|  |   return toFormData$1(data, new platform.classes.URLSearchParams(), Object.assign({ | ||
|  |     visitor: function(value, key, path, helpers) { | ||
|  |       if (platform.isNode && utils$1.isBuffer(value)) { | ||
|  |         this.append(key, value.toString('base64')); | ||
|  |         return false; | ||
|  |       } | ||
|  | 
 | ||
|  |       return helpers.defaultVisitor.apply(this, arguments); | ||
|  |     } | ||
|  |   }, options)); | ||
|  | } | ||
|  | 
 | ||
|  | /** | ||
|  |  * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']
 | ||
|  |  * | ||
|  |  * @param {string} name - The name of the property to get. | ||
|  |  * | ||
|  |  * @returns An array of strings. | ||
|  |  */ | ||
|  | function parsePropPath(name) { | ||
|  |   // foo[x][y][z]
 | ||
|  |   // foo.x.y.z
 | ||
|  |   // foo-x-y-z
 | ||
|  |   // foo x y z
 | ||
|  |   return utils$1.matchAll(/\w+|\[(\w*)]/g, name).map(match => { | ||
|  |     return match[0] === '[]' ? '' : match[1] || match[0]; | ||
|  |   }); | ||
|  | } | ||
|  | 
 | ||
|  | /** | ||
|  |  * Convert an array to an object. | ||
|  |  * | ||
|  |  * @param {Array<any>} arr - The array to convert to an object. | ||
|  |  * | ||
|  |  * @returns An object with the same keys and values as the array. | ||
|  |  */ | ||
|  | function arrayToObject(arr) { | ||
|  |   const obj = {}; | ||
|  |   const keys = Object.keys(arr); | ||
|  |   let i; | ||
|  |   const len = keys.length; | ||
|  |   let key; | ||
|  |   for (i = 0; i < len; i++) { | ||
|  |     key = keys[i]; | ||
|  |     obj[key] = arr[key]; | ||
|  |   } | ||
|  |   return obj; | ||
|  | } | ||
|  | 
 | ||
|  | /** | ||
|  |  * It takes a FormData object and returns a JavaScript object | ||
|  |  * | ||
|  |  * @param {string} formData The FormData object to convert to JSON. | ||
|  |  * | ||
|  |  * @returns {Object<string, any> | null} The converted object. | ||
|  |  */ | ||
|  | function formDataToJSON(formData) { | ||
|  |   function buildPath(path, value, target, index) { | ||
|  |     let name = path[index++]; | ||
|  | 
 | ||
|  |     if (name === '__proto__') return true; | ||
|  | 
 | ||
|  |     const isNumericKey = Number.isFinite(+name); | ||
|  |     const isLast = index >= path.length; | ||
|  |     name = !name && utils$1.isArray(target) ? target.length : name; | ||
|  | 
 | ||
|  |     if (isLast) { | ||
|  |       if (utils$1.hasOwnProp(target, name)) { | ||
|  |         target[name] = [target[name], value]; | ||
|  |       } else { | ||
|  |         target[name] = value; | ||
|  |       } | ||
|  | 
 | ||
|  |       return !isNumericKey; | ||
|  |     } | ||
|  | 
 | ||
|  |     if (!target[name] || !utils$1.isObject(target[name])) { | ||
|  |       target[name] = []; | ||
|  |     } | ||
|  | 
 | ||
|  |     const result = buildPath(path, value, target[name], index); | ||
|  | 
 | ||
|  |     if (result && utils$1.isArray(target[name])) { | ||
|  |       target[name] = arrayToObject(target[name]); | ||
|  |     } | ||
|  | 
 | ||
|  |     return !isNumericKey; | ||
|  |   } | ||
|  | 
 | ||
|  |   if (utils$1.isFormData(formData) && utils$1.isFunction(formData.entries)) { | ||
|  |     const obj = {}; | ||
|  | 
 | ||
|  |     utils$1.forEachEntry(formData, (name, value) => { | ||
|  |       buildPath(parsePropPath(name), value, obj, 0); | ||
|  |     }); | ||
|  | 
 | ||
|  |     return obj; | ||
|  |   } | ||
|  | 
 | ||
|  |   return null; | ||
|  | } | ||
|  | 
 | ||
|  | /** | ||
|  |  * It takes a string, tries to parse it, and if it fails, it returns the stringified version | ||
|  |  * of the input | ||
|  |  * | ||
|  |  * @param {any} rawValue - The value to be stringified. | ||
|  |  * @param {Function} parser - A function that parses a string into a JavaScript object. | ||
|  |  * @param {Function} encoder - A function that takes a value and returns a string. | ||
|  |  * | ||
|  |  * @returns {string} A stringified version of the rawValue. | ||
|  |  */ | ||
|  | function stringifySafely(rawValue, parser, encoder) { | ||
|  |   if (utils$1.isString(rawValue)) { | ||
|  |     try { | ||
|  |       (parser || JSON.parse)(rawValue); | ||
|  |       return utils$1.trim(rawValue); | ||
|  |     } catch (e) { | ||
|  |       if (e.name !== 'SyntaxError') { | ||
|  |         throw e; | ||
|  |       } | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   return (encoder || JSON.stringify)(rawValue); | ||
|  | } | ||
|  | 
 | ||
|  | const defaults = { | ||
|  | 
 | ||
|  |   transitional: transitionalDefaults, | ||
|  | 
 | ||
|  |   adapter: ['xhr', 'http', 'fetch'], | ||
|  | 
 | ||
|  |   transformRequest: [function transformRequest(data, headers) { | ||
|  |     const contentType = headers.getContentType() || ''; | ||
|  |     const hasJSONContentType = contentType.indexOf('application/json') > -1; | ||
|  |     const isObjectPayload = utils$1.isObject(data); | ||
|  | 
 | ||
|  |     if (isObjectPayload && utils$1.isHTMLForm(data)) { | ||
|  |       data = new FormData(data); | ||
|  |     } | ||
|  | 
 | ||
|  |     const isFormData = utils$1.isFormData(data); | ||
|  | 
 | ||
|  |     if (isFormData) { | ||
|  |       return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data; | ||
|  |     } | ||
|  | 
 | ||
|  |     if (utils$1.isArrayBuffer(data) || | ||
|  |       utils$1.isBuffer(data) || | ||
|  |       utils$1.isStream(data) || | ||
|  |       utils$1.isFile(data) || | ||
|  |       utils$1.isBlob(data) || | ||
|  |       utils$1.isReadableStream(data) | ||
|  |     ) { | ||
|  |       return data; | ||
|  |     } | ||
|  |     if (utils$1.isArrayBufferView(data)) { | ||
|  |       return data.buffer; | ||
|  |     } | ||
|  |     if (utils$1.isURLSearchParams(data)) { | ||
|  |       headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false); | ||
|  |       return data.toString(); | ||
|  |     } | ||
|  | 
 | ||
|  |     let isFileList; | ||
|  | 
 | ||
|  |     if (isObjectPayload) { | ||
|  |       if (contentType.indexOf('application/x-www-form-urlencoded') > -1) { | ||
|  |         return toURLEncodedForm(data, this.formSerializer).toString(); | ||
|  |       } | ||
|  | 
 | ||
|  |       if ((isFileList = utils$1.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) { | ||
|  |         const _FormData = this.env && this.env.FormData; | ||
|  | 
 | ||
|  |         return toFormData$1( | ||
|  |           isFileList ? {'files[]': data} : data, | ||
|  |           _FormData && new _FormData(), | ||
|  |           this.formSerializer | ||
|  |         ); | ||
|  |       } | ||
|  |     } | ||
|  | 
 | ||
|  |     if (isObjectPayload || hasJSONContentType ) { | ||
|  |       headers.setContentType('application/json', false); | ||
|  |       return stringifySafely(data); | ||
|  |     } | ||
|  | 
 | ||
|  |     return data; | ||
|  |   }], | ||
|  | 
 | ||
|  |   transformResponse: [function transformResponse(data) { | ||
|  |     const transitional = this.transitional || defaults.transitional; | ||
|  |     const forcedJSONParsing = transitional && transitional.forcedJSONParsing; | ||
|  |     const JSONRequested = this.responseType === 'json'; | ||
|  | 
 | ||
|  |     if (utils$1.isResponse(data) || utils$1.isReadableStream(data)) { | ||
|  |       return data; | ||
|  |     } | ||
|  | 
 | ||
|  |     if (data && utils$1.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) { | ||
|  |       const silentJSONParsing = transitional && transitional.silentJSONParsing; | ||
|  |       const strictJSONParsing = !silentJSONParsing && JSONRequested; | ||
|  | 
 | ||
|  |       try { | ||
|  |         return JSON.parse(data); | ||
|  |       } catch (e) { | ||
|  |         if (strictJSONParsing) { | ||
|  |           if (e.name === 'SyntaxError') { | ||
|  |             throw AxiosError$1.from(e, AxiosError$1.ERR_BAD_RESPONSE, this, null, this.response); | ||
|  |           } | ||
|  |           throw e; | ||
|  |         } | ||
|  |       } | ||
|  |     } | ||
|  | 
 | ||
|  |     return data; | ||
|  |   }], | ||
|  | 
 | ||
|  |   /** | ||
|  |    * A timeout in milliseconds to abort a request. If set to 0 (default) a | ||
|  |    * timeout is not created. | ||
|  |    */ | ||
|  |   timeout: 0, | ||
|  | 
 | ||
|  |   xsrfCookieName: 'XSRF-TOKEN', | ||
|  |   xsrfHeaderName: 'X-XSRF-TOKEN', | ||
|  | 
 | ||
|  |   maxContentLength: -1, | ||
|  |   maxBodyLength: -1, | ||
|  | 
 | ||
|  |   env: { | ||
|  |     FormData: platform.classes.FormData, | ||
|  |     Blob: platform.classes.Blob | ||
|  |   }, | ||
|  | 
 | ||
|  |   validateStatus: function validateStatus(status) { | ||
|  |     return status >= 200 && status < 300; | ||
|  |   }, | ||
|  | 
 | ||
|  |   headers: { | ||
|  |     common: { | ||
|  |       'Accept': 'application/json, text/plain, */*', | ||
|  |       'Content-Type': undefined | ||
|  |     } | ||
|  |   } | ||
|  | }; | ||
|  | 
 | ||
|  | utils$1.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => { | ||
|  |   defaults.headers[method] = {}; | ||
|  | }); | ||
|  | 
 | ||
|  | const defaults$1 = defaults; | ||
|  | 
 | ||
|  | // RawAxiosHeaders whose duplicates are ignored by node
 | ||
|  | // c.f. https://nodejs.org/api/http.html#http_message_headers
 | ||
|  | const ignoreDuplicateOf = utils$1.toObjectSet([ | ||
|  |   'age', 'authorization', 'content-length', 'content-type', 'etag', | ||
|  |   'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since', | ||
|  |   'last-modified', 'location', 'max-forwards', 'proxy-authorization', | ||
|  |   'referer', 'retry-after', 'user-agent' | ||
|  | ]); | ||
|  | 
 | ||
|  | /** | ||
|  |  * Parse headers into an object | ||
|  |  * | ||
|  |  * ```
 | ||
|  |  * Date: Wed, 27 Aug 2014 08:58:49 GMT | ||
|  |  * Content-Type: application/json | ||
|  |  * Connection: keep-alive | ||
|  |  * Transfer-Encoding: chunked | ||
|  |  * ```
 | ||
|  |  * | ||
|  |  * @param {String} rawHeaders Headers needing to be parsed | ||
|  |  * | ||
|  |  * @returns {Object} Headers parsed into an object | ||
|  |  */ | ||
|  | const parseHeaders = rawHeaders => { | ||
|  |   const parsed = {}; | ||
|  |   let key; | ||
|  |   let val; | ||
|  |   let i; | ||
|  | 
 | ||
|  |   rawHeaders && rawHeaders.split('\n').forEach(function parser(line) { | ||
|  |     i = line.indexOf(':'); | ||
|  |     key = line.substring(0, i).trim().toLowerCase(); | ||
|  |     val = line.substring(i + 1).trim(); | ||
|  | 
 | ||
|  |     if (!key || (parsed[key] && ignoreDuplicateOf[key])) { | ||
|  |       return; | ||
|  |     } | ||
|  | 
 | ||
|  |     if (key === 'set-cookie') { | ||
|  |       if (parsed[key]) { | ||
|  |         parsed[key].push(val); | ||
|  |       } else { | ||
|  |         parsed[key] = [val]; | ||
|  |       } | ||
|  |     } else { | ||
|  |       parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val; | ||
|  |     } | ||
|  |   }); | ||
|  | 
 | ||
|  |   return parsed; | ||
|  | }; | ||
|  | 
 | ||
|  | const $internals = Symbol('internals'); | ||
|  | 
 | ||
|  | function normalizeHeader(header) { | ||
|  |   return header && String(header).trim().toLowerCase(); | ||
|  | } | ||
|  | 
 | ||
|  | function normalizeValue(value) { | ||
|  |   if (value === false || value == null) { | ||
|  |     return value; | ||
|  |   } | ||
|  | 
 | ||
|  |   return utils$1.isArray(value) ? value.map(normalizeValue) : String(value); | ||
|  | } | ||
|  | 
 | ||
|  | function parseTokens(str) { | ||
|  |   const tokens = Object.create(null); | ||
|  |   const tokensRE = /([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g; | ||
|  |   let match; | ||
|  | 
 | ||
|  |   while ((match = tokensRE.exec(str))) { | ||
|  |     tokens[match[1]] = match[2]; | ||
|  |   } | ||
|  | 
 | ||
|  |   return tokens; | ||
|  | } | ||
|  | 
 | ||
|  | const isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());
 | ||
|  | 
 | ||
|  | function matchHeaderValue(context, value, header, filter, isHeaderNameFilter) { | ||
|  |   if (utils$1.isFunction(filter)) { | ||
|  |     return filter.call(this, value, header); | ||
|  |   } | ||
|  | 
 | ||
|  |   if (isHeaderNameFilter) { | ||
|  |     value = header; | ||
|  |   } | ||
|  | 
 | ||
|  |   if (!utils$1.isString(value)) return; | ||
|  | 
 | ||
|  |   if (utils$1.isString(filter)) { | ||
|  |     return value.indexOf(filter) !== -1; | ||
|  |   } | ||
|  | 
 | ||
|  |   if (utils$1.isRegExp(filter)) { | ||
|  |     return filter.test(value); | ||
|  |   } | ||
|  | } | ||
|  | 
 | ||
|  | function formatHeader(header) { | ||
|  |   return header.trim() | ||
|  |     .toLowerCase().replace(/([a-z\d])(\w*)/g, (w, char, str) => { | ||
|  |       return char.toUpperCase() + str; | ||
|  |     }); | ||
|  | } | ||
|  | 
 | ||
|  | function buildAccessors(obj, header) { | ||
|  |   const accessorName = utils$1.toCamelCase(' ' + header); | ||
|  | 
 | ||
|  |   ['get', 'set', 'has'].forEach(methodName => { | ||
|  |     Object.defineProperty(obj, methodName + accessorName, { | ||
|  |       value: function(arg1, arg2, arg3) { | ||
|  |         return this[methodName].call(this, header, arg1, arg2, arg3); | ||
|  |       }, | ||
|  |       configurable: true | ||
|  |     }); | ||
|  |   }); | ||
|  | } | ||
|  | 
 | ||
|  | class AxiosHeaders$1 { | ||
|  |   constructor(headers) { | ||
|  |     headers && this.set(headers); | ||
|  |   } | ||
|  | 
 | ||
|  |   set(header, valueOrRewrite, rewrite) { | ||
|  |     const self = this; | ||
|  | 
 | ||
|  |     function setHeader(_value, _header, _rewrite) { | ||
|  |       const lHeader = normalizeHeader(_header); | ||
|  | 
 | ||
|  |       if (!lHeader) { | ||
|  |         throw new Error('header name must be a non-empty string'); | ||
|  |       } | ||
|  | 
 | ||
|  |       const key = utils$1.findKey(self, lHeader); | ||
|  | 
 | ||
|  |       if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) { | ||
|  |         self[key || _header] = normalizeValue(_value); | ||
|  |       } | ||
|  |     } | ||
|  | 
 | ||
|  |     const setHeaders = (headers, _rewrite) => | ||
|  |       utils$1.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite)); | ||
|  | 
 | ||
|  |     if (utils$1.isPlainObject(header) || header instanceof this.constructor) { | ||
|  |       setHeaders(header, valueOrRewrite); | ||
|  |     } else if(utils$1.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) { | ||
|  |       setHeaders(parseHeaders(header), valueOrRewrite); | ||
|  |     } else if (utils$1.isObject(header) && utils$1.isIterable(header)) { | ||
|  |       let obj = {}, dest, key; | ||
|  |       for (const entry of header) { | ||
|  |         if (!utils$1.isArray(entry)) { | ||
|  |           throw TypeError('Object iterator must return a key-value pair'); | ||
|  |         } | ||
|  | 
 | ||
|  |         obj[key = entry[0]] = (dest = obj[key]) ? | ||
|  |           (utils$1.isArray(dest) ? [...dest, entry[1]] : [dest, entry[1]]) : entry[1]; | ||
|  |       } | ||
|  | 
 | ||
|  |       setHeaders(obj, valueOrRewrite); | ||
|  |     } else { | ||
|  |       header != null && setHeader(valueOrRewrite, header, rewrite); | ||
|  |     } | ||
|  | 
 | ||
|  |     return this; | ||
|  |   } | ||
|  | 
 | ||
|  |   get(header, parser) { | ||
|  |     header = normalizeHeader(header); | ||
|  | 
 | ||
|  |     if (header) { | ||
|  |       const key = utils$1.findKey(this, header); | ||
|  | 
 | ||
|  |       if (key) { | ||
|  |         const value = this[key]; | ||
|  | 
 | ||
|  |         if (!parser) { | ||
|  |           return value; | ||
|  |         } | ||
|  | 
 | ||
|  |         if (parser === true) { | ||
|  |           return parseTokens(value); | ||
|  |         } | ||
|  | 
 | ||
|  |         if (utils$1.isFunction(parser)) { | ||
|  |           return parser.call(this, value, key); | ||
|  |         } | ||
|  | 
 | ||
|  |         if (utils$1.isRegExp(parser)) { | ||
|  |           return parser.exec(value); | ||
|  |         } | ||
|  | 
 | ||
|  |         throw new TypeError('parser must be boolean|regexp|function'); | ||
|  |       } | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   has(header, matcher) { | ||
|  |     header = normalizeHeader(header); | ||
|  | 
 | ||
|  |     if (header) { | ||
|  |       const key = utils$1.findKey(this, header); | ||
|  | 
 | ||
|  |       return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher))); | ||
|  |     } | ||
|  | 
 | ||
|  |     return false; | ||
|  |   } | ||
|  | 
 | ||
|  |   delete(header, matcher) { | ||
|  |     const self = this; | ||
|  |     let deleted = false; | ||
|  | 
 | ||
|  |     function deleteHeader(_header) { | ||
|  |       _header = normalizeHeader(_header); | ||
|  | 
 | ||
|  |       if (_header) { | ||
|  |         const key = utils$1.findKey(self, _header); | ||
|  | 
 | ||
|  |         if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) { | ||
|  |           delete self[key]; | ||
|  | 
 | ||
|  |           deleted = true; | ||
|  |         } | ||
|  |       } | ||
|  |     } | ||
|  | 
 | ||
|  |     if (utils$1.isArray(header)) { | ||
|  |       header.forEach(deleteHeader); | ||
|  |     } else { | ||
|  |       deleteHeader(header); | ||
|  |     } | ||
|  | 
 | ||
|  |     return deleted; | ||
|  |   } | ||
|  | 
 | ||
|  |   clear(matcher) { | ||
|  |     const keys = Object.keys(this); | ||
|  |     let i = keys.length; | ||
|  |     let deleted = false; | ||
|  | 
 | ||
|  |     while (i--) { | ||
|  |       const key = keys[i]; | ||
|  |       if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) { | ||
|  |         delete this[key]; | ||
|  |         deleted = true; | ||
|  |       } | ||
|  |     } | ||
|  | 
 | ||
|  |     return deleted; | ||
|  |   } | ||
|  | 
 | ||
|  |   normalize(format) { | ||
|  |     const self = this; | ||
|  |     const headers = {}; | ||
|  | 
 | ||
|  |     utils$1.forEach(this, (value, header) => { | ||
|  |       const key = utils$1.findKey(headers, header); | ||
|  | 
 | ||
|  |       if (key) { | ||
|  |         self[key] = normalizeValue(value); | ||
|  |         delete self[header]; | ||
|  |         return; | ||
|  |       } | ||
|  | 
 | ||
|  |       const normalized = format ? formatHeader(header) : String(header).trim(); | ||
|  | 
 | ||
|  |       if (normalized !== header) { | ||
|  |         delete self[header]; | ||
|  |       } | ||
|  | 
 | ||
|  |       self[normalized] = normalizeValue(value); | ||
|  | 
 | ||
|  |       headers[normalized] = true; | ||
|  |     }); | ||
|  | 
 | ||
|  |     return this; | ||
|  |   } | ||
|  | 
 | ||
|  |   concat(...targets) { | ||
|  |     return this.constructor.concat(this, ...targets); | ||
|  |   } | ||
|  | 
 | ||
|  |   toJSON(asStrings) { | ||
|  |     const obj = Object.create(null); | ||
|  | 
 | ||
|  |     utils$1.forEach(this, (value, header) => { | ||
|  |       value != null && value !== false && (obj[header] = asStrings && utils$1.isArray(value) ? value.join(', ') : value); | ||
|  |     }); | ||
|  | 
 | ||
|  |     return obj; | ||
|  |   } | ||
|  | 
 | ||
|  |   [Symbol.iterator]() { | ||
|  |     return Object.entries(this.toJSON())[Symbol.iterator](); | ||
|  |   } | ||
|  | 
 | ||
|  |   toString() { | ||
|  |     return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\n'); | ||
|  |   } | ||
|  | 
 | ||
|  |   getSetCookie() { | ||
|  |     return this.get("set-cookie") || []; | ||
|  |   } | ||
|  | 
 | ||
|  |   get [Symbol.toStringTag]() { | ||
|  |     return 'AxiosHeaders'; | ||
|  |   } | ||
|  | 
 | ||
|  |   static from(thing) { | ||
|  |     return thing instanceof this ? thing : new this(thing); | ||
|  |   } | ||
|  | 
 | ||
|  |   static concat(first, ...targets) { | ||
|  |     const computed = new this(first); | ||
|  | 
 | ||
|  |     targets.forEach((target) => computed.set(target)); | ||
|  | 
 | ||
|  |     return computed; | ||
|  |   } | ||
|  | 
 | ||
|  |   static accessor(header) { | ||
|  |     const internals = this[$internals] = (this[$internals] = { | ||
|  |       accessors: {} | ||
|  |     }); | ||
|  | 
 | ||
|  |     const accessors = internals.accessors; | ||
|  |     const prototype = this.prototype; | ||
|  | 
 | ||
|  |     function defineAccessor(_header) { | ||
|  |       const lHeader = normalizeHeader(_header); | ||
|  | 
 | ||
|  |       if (!accessors[lHeader]) { | ||
|  |         buildAccessors(prototype, _header); | ||
|  |         accessors[lHeader] = true; | ||
|  |       } | ||
|  |     } | ||
|  | 
 | ||
|  |     utils$1.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header); | ||
|  | 
 | ||
|  |     return this; | ||
|  |   } | ||
|  | } | ||
|  | 
 | ||
|  | AxiosHeaders$1.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']); | ||
|  | 
 | ||
|  | // reserved names hotfix
 | ||
|  | utils$1.reduceDescriptors(AxiosHeaders$1.prototype, ({value}, key) => { | ||
|  |   let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`
 | ||
|  |   return { | ||
|  |     get: () => value, | ||
|  |     set(headerValue) { | ||
|  |       this[mapped] = headerValue; | ||
|  |     } | ||
|  |   } | ||
|  | }); | ||
|  | 
 | ||
|  | utils$1.freezeMethods(AxiosHeaders$1); | ||
|  | 
 | ||
|  | const AxiosHeaders$2 = AxiosHeaders$1; | ||
|  | 
 | ||
|  | /** | ||
|  |  * Transform the data for a request or a response | ||
|  |  * | ||
|  |  * @param {Array|Function} fns A single function or Array of functions | ||
|  |  * @param {?Object} response The response object | ||
|  |  * | ||
|  |  * @returns {*} The resulting transformed data | ||
|  |  */ | ||
|  | function transformData(fns, response) { | ||
|  |   const config = this || defaults$1; | ||
|  |   const context = response || config; | ||
|  |   const headers = AxiosHeaders$2.from(context.headers); | ||
|  |   let data = context.data; | ||
|  | 
 | ||
|  |   utils$1.forEach(fns, function transform(fn) { | ||
|  |     data = fn.call(config, data, headers.normalize(), response ? response.status : undefined); | ||
|  |   }); | ||
|  | 
 | ||
|  |   headers.normalize(); | ||
|  | 
 | ||
|  |   return data; | ||
|  | } | ||
|  | 
 | ||
|  | function isCancel$1(value) { | ||
|  |   return !!(value && value.__CANCEL__); | ||
|  | } | ||
|  | 
 | ||
|  | /** | ||
|  |  * A `CanceledError` is an object that is thrown when an operation is canceled. | ||
|  |  * | ||
|  |  * @param {string=} message The message. | ||
|  |  * @param {Object=} config The config. | ||
|  |  * @param {Object=} request The request. | ||
|  |  * | ||
|  |  * @returns {CanceledError} The created error. | ||
|  |  */ | ||
|  | function CanceledError$1(message, config, request) { | ||
|  |   // eslint-disable-next-line no-eq-null,eqeqeq
 | ||
|  |   AxiosError$1.call(this, message == null ? 'canceled' : message, AxiosError$1.ERR_CANCELED, config, request); | ||
|  |   this.name = 'CanceledError'; | ||
|  | } | ||
|  | 
 | ||
|  | utils$1.inherits(CanceledError$1, AxiosError$1, { | ||
|  |   __CANCEL__: true | ||
|  | }); | ||
|  | 
 | ||
|  | /** | ||
|  |  * Resolve or reject a Promise based on response status. | ||
|  |  * | ||
|  |  * @param {Function} resolve A function that resolves the promise. | ||
|  |  * @param {Function} reject A function that rejects the promise. | ||
|  |  * @param {object} response The response. | ||
|  |  * | ||
|  |  * @returns {object} The response. | ||
|  |  */ | ||
|  | function settle(resolve, reject, response) { | ||
|  |   const validateStatus = response.config.validateStatus; | ||
|  |   if (!response.status || !validateStatus || validateStatus(response.status)) { | ||
|  |     resolve(response); | ||
|  |   } else { | ||
|  |     reject(new AxiosError$1( | ||
|  |       'Request failed with status code ' + response.status, | ||
|  |       [AxiosError$1.ERR_BAD_REQUEST, AxiosError$1.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4], | ||
|  |       response.config, | ||
|  |       response.request, | ||
|  |       response | ||
|  |     )); | ||
|  |   } | ||
|  | } | ||
|  | 
 | ||
|  | function parseProtocol(url) { | ||
|  |   const match = /^([-+\w]{1,25})(:?\/\/|:)/.exec(url); | ||
|  |   return match && match[1] || ''; | ||
|  | } | ||
|  | 
 | ||
|  | /** | ||
|  |  * Calculate data maxRate | ||
|  |  * @param {Number} [samplesCount= 10] | ||
|  |  * @param {Number} [min= 1000] | ||
|  |  * @returns {Function} | ||
|  |  */ | ||
|  | function speedometer(samplesCount, min) { | ||
|  |   samplesCount = samplesCount || 10; | ||
|  |   const bytes = new Array(samplesCount); | ||
|  |   const timestamps = new Array(samplesCount); | ||
|  |   let head = 0; | ||
|  |   let tail = 0; | ||
|  |   let firstSampleTS; | ||
|  | 
 | ||
|  |   min = min !== undefined ? min : 1000; | ||
|  | 
 | ||
|  |   return function push(chunkLength) { | ||
|  |     const now = Date.now(); | ||
|  | 
 | ||
|  |     const startedAt = timestamps[tail]; | ||
|  | 
 | ||
|  |     if (!firstSampleTS) { | ||
|  |       firstSampleTS = now; | ||
|  |     } | ||
|  | 
 | ||
|  |     bytes[head] = chunkLength; | ||
|  |     timestamps[head] = now; | ||
|  | 
 | ||
|  |     let i = tail; | ||
|  |     let bytesCount = 0; | ||
|  | 
 | ||
|  |     while (i !== head) { | ||
|  |       bytesCount += bytes[i++]; | ||
|  |       i = i % samplesCount; | ||
|  |     } | ||
|  | 
 | ||
|  |     head = (head + 1) % samplesCount; | ||
|  | 
 | ||
|  |     if (head === tail) { | ||
|  |       tail = (tail + 1) % samplesCount; | ||
|  |     } | ||
|  | 
 | ||
|  |     if (now - firstSampleTS < min) { | ||
|  |       return; | ||
|  |     } | ||
|  | 
 | ||
|  |     const passed = startedAt && now - startedAt; | ||
|  | 
 | ||
|  |     return passed ? Math.round(bytesCount * 1000 / passed) : undefined; | ||
|  |   }; | ||
|  | } | ||
|  | 
 | ||
|  | /** | ||
|  |  * Throttle decorator | ||
|  |  * @param {Function} fn | ||
|  |  * @param {Number} freq | ||
|  |  * @return {Function} | ||
|  |  */ | ||
|  | function throttle(fn, freq) { | ||
|  |   let timestamp = 0; | ||
|  |   let threshold = 1000 / freq; | ||
|  |   let lastArgs; | ||
|  |   let timer; | ||
|  | 
 | ||
|  |   const invoke = (args, now = Date.now()) => { | ||
|  |     timestamp = now; | ||
|  |     lastArgs = null; | ||
|  |     if (timer) { | ||
|  |       clearTimeout(timer); | ||
|  |       timer = null; | ||
|  |     } | ||
|  |     fn.apply(null, args); | ||
|  |   }; | ||
|  | 
 | ||
|  |   const throttled = (...args) => { | ||
|  |     const now = Date.now(); | ||
|  |     const passed = now - timestamp; | ||
|  |     if ( passed >= threshold) { | ||
|  |       invoke(args, now); | ||
|  |     } else { | ||
|  |       lastArgs = args; | ||
|  |       if (!timer) { | ||
|  |         timer = setTimeout(() => { | ||
|  |           timer = null; | ||
|  |           invoke(lastArgs); | ||
|  |         }, threshold - passed); | ||
|  |       } | ||
|  |     } | ||
|  |   }; | ||
|  | 
 | ||
|  |   const flush = () => lastArgs && invoke(lastArgs); | ||
|  | 
 | ||
|  |   return [throttled, flush]; | ||
|  | } | ||
|  | 
 | ||
|  | const progressEventReducer = (listener, isDownloadStream, freq = 3) => { | ||
|  |   let bytesNotified = 0; | ||
|  |   const _speedometer = speedometer(50, 250); | ||
|  | 
 | ||
|  |   return throttle(e => { | ||
|  |     const loaded = e.loaded; | ||
|  |     const total = e.lengthComputable ? e.total : undefined; | ||
|  |     const progressBytes = loaded - bytesNotified; | ||
|  |     const rate = _speedometer(progressBytes); | ||
|  |     const inRange = loaded <= total; | ||
|  | 
 | ||
|  |     bytesNotified = loaded; | ||
|  | 
 | ||
|  |     const data = { | ||
|  |       loaded, | ||
|  |       total, | ||
|  |       progress: total ? (loaded / total) : undefined, | ||
|  |       bytes: progressBytes, | ||
|  |       rate: rate ? rate : undefined, | ||
|  |       estimated: rate && total && inRange ? (total - loaded) / rate : undefined, | ||
|  |       event: e, | ||
|  |       lengthComputable: total != null, | ||
|  |       [isDownloadStream ? 'download' : 'upload']: true | ||
|  |     }; | ||
|  | 
 | ||
|  |     listener(data); | ||
|  |   }, freq); | ||
|  | }; | ||
|  | 
 | ||
|  | const progressEventDecorator = (total, throttled) => { | ||
|  |   const lengthComputable = total != null; | ||
|  | 
 | ||
|  |   return [(loaded) => throttled[0]({ | ||
|  |     lengthComputable, | ||
|  |     total, | ||
|  |     loaded | ||
|  |   }), throttled[1]]; | ||
|  | }; | ||
|  | 
 | ||
|  | const asyncDecorator = (fn) => (...args) => utils$1.asap(() => fn(...args)); | ||
|  | 
 | ||
|  | const isURLSameOrigin = platform.hasStandardBrowserEnv ? ((origin, isMSIE) => (url) => { | ||
|  |   url = new URL(url, platform.origin); | ||
|  | 
 | ||
|  |   return ( | ||
|  |     origin.protocol === url.protocol && | ||
|  |     origin.host === url.host && | ||
|  |     (isMSIE || origin.port === url.port) | ||
|  |   ); | ||
|  | })( | ||
|  |   new URL(platform.origin), | ||
|  |   platform.navigator && /(msie|trident)/i.test(platform.navigator.userAgent) | ||
|  | ) : () => true; | ||
|  | 
 | ||
|  | const cookies = platform.hasStandardBrowserEnv ? | ||
|  | 
 | ||
|  |   // Standard browser envs support document.cookie
 | ||
|  |   { | ||
|  |     write(name, value, expires, path, domain, secure) { | ||
|  |       const cookie = [name + '=' + encodeURIComponent(value)]; | ||
|  | 
 | ||
|  |       utils$1.isNumber(expires) && cookie.push('expires=' + new Date(expires).toGMTString()); | ||
|  | 
 | ||
|  |       utils$1.isString(path) && cookie.push('path=' + path); | ||
|  | 
 | ||
|  |       utils$1.isString(domain) && cookie.push('domain=' + domain); | ||
|  | 
 | ||
|  |       secure === true && cookie.push('secure'); | ||
|  | 
 | ||
|  |       document.cookie = cookie.join('; '); | ||
|  |     }, | ||
|  | 
 | ||
|  |     read(name) { | ||
|  |       const match = document.cookie.match(new RegExp('(^|;\\s*)(' + name + ')=([^;]*)')); | ||
|  |       return (match ? decodeURIComponent(match[3]) : null); | ||
|  |     }, | ||
|  | 
 | ||
|  |     remove(name) { | ||
|  |       this.write(name, '', Date.now() - 86400000); | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   : | ||
|  | 
 | ||
|  |   // Non-standard browser env (web workers, react-native) lack needed support.
 | ||
|  |   { | ||
|  |     write() {}, | ||
|  |     read() { | ||
|  |       return null; | ||
|  |     }, | ||
|  |     remove() {} | ||
|  |   }; | ||
|  | 
 | ||
|  | /** | ||
|  |  * Determines whether the specified URL is absolute | ||
|  |  * | ||
|  |  * @param {string} url The URL to test | ||
|  |  * | ||
|  |  * @returns {boolean} True if the specified URL is absolute, otherwise false | ||
|  |  */ | ||
|  | function isAbsoluteURL(url) { | ||
|  |   // A URL is considered absolute if it begins with "<scheme>://" or "//" (protocol-relative URL).
 | ||
|  |   // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed
 | ||
|  |   // by any combination of letters, digits, plus, period, or hyphen.
 | ||
|  |   return /^([a-z][a-z\d+\-.]*:)?\/\//i.test(url); | ||
|  | } | ||
|  | 
 | ||
|  | /** | ||
|  |  * Creates a new URL by combining the specified URLs | ||
|  |  * | ||
|  |  * @param {string} baseURL The base URL | ||
|  |  * @param {string} relativeURL The relative URL | ||
|  |  * | ||
|  |  * @returns {string} The combined URL | ||
|  |  */ | ||
|  | function combineURLs(baseURL, relativeURL) { | ||
|  |   return relativeURL | ||
|  |     ? baseURL.replace(/\/?\/$/, '') + '/' + relativeURL.replace(/^\/+/, '') | ||
|  |     : baseURL; | ||
|  | } | ||
|  | 
 | ||
|  | /** | ||
|  |  * Creates a new URL by combining the baseURL with the requestedURL, | ||
|  |  * only when the requestedURL is not already an absolute URL. | ||
|  |  * If the requestURL is absolute, this function returns the requestedURL untouched. | ||
|  |  * | ||
|  |  * @param {string} baseURL The base URL | ||
|  |  * @param {string} requestedURL Absolute or relative URL to combine | ||
|  |  * | ||
|  |  * @returns {string} The combined full path | ||
|  |  */ | ||
|  | function buildFullPath(baseURL, requestedURL, allowAbsoluteUrls) { | ||
|  |   let isRelativeUrl = !isAbsoluteURL(requestedURL); | ||
|  |   if (baseURL && (isRelativeUrl || allowAbsoluteUrls == false)) { | ||
|  |     return combineURLs(baseURL, requestedURL); | ||
|  |   } | ||
|  |   return requestedURL; | ||
|  | } | ||
|  | 
 | ||
|  | const headersToObject = (thing) => thing instanceof AxiosHeaders$2 ? { ...thing } : thing; | ||
|  | 
 | ||
|  | /** | ||
|  |  * Config-specific merge-function which creates a new config-object | ||
|  |  * by merging two configuration objects together. | ||
|  |  * | ||
|  |  * @param {Object} config1 | ||
|  |  * @param {Object} config2 | ||
|  |  * | ||
|  |  * @returns {Object} New object resulting from merging config2 to config1 | ||
|  |  */ | ||
|  | function mergeConfig$1(config1, config2) { | ||
|  |   // eslint-disable-next-line no-param-reassign
 | ||
|  |   config2 = config2 || {}; | ||
|  |   const config = {}; | ||
|  | 
 | ||
|  |   function getMergedValue(target, source, prop, caseless) { | ||
|  |     if (utils$1.isPlainObject(target) && utils$1.isPlainObject(source)) { | ||
|  |       return utils$1.merge.call({caseless}, target, source); | ||
|  |     } else if (utils$1.isPlainObject(source)) { | ||
|  |       return utils$1.merge({}, source); | ||
|  |     } else if (utils$1.isArray(source)) { | ||
|  |       return source.slice(); | ||
|  |     } | ||
|  |     return source; | ||
|  |   } | ||
|  | 
 | ||
|  |   // eslint-disable-next-line consistent-return
 | ||
|  |   function mergeDeepProperties(a, b, prop , caseless) { | ||
|  |     if (!utils$1.isUndefined(b)) { | ||
|  |       return getMergedValue(a, b, prop , caseless); | ||
|  |     } else if (!utils$1.isUndefined(a)) { | ||
|  |       return getMergedValue(undefined, a, prop , caseless); | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   // eslint-disable-next-line consistent-return
 | ||
|  |   function valueFromConfig2(a, b) { | ||
|  |     if (!utils$1.isUndefined(b)) { | ||
|  |       return getMergedValue(undefined, b); | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   // eslint-disable-next-line consistent-return
 | ||
|  |   function defaultToConfig2(a, b) { | ||
|  |     if (!utils$1.isUndefined(b)) { | ||
|  |       return getMergedValue(undefined, b); | ||
|  |     } else if (!utils$1.isUndefined(a)) { | ||
|  |       return getMergedValue(undefined, a); | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   // eslint-disable-next-line consistent-return
 | ||
|  |   function mergeDirectKeys(a, b, prop) { | ||
|  |     if (prop in config2) { | ||
|  |       return getMergedValue(a, b); | ||
|  |     } else if (prop in config1) { | ||
|  |       return getMergedValue(undefined, a); | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   const mergeMap = { | ||
|  |     url: valueFromConfig2, | ||
|  |     method: valueFromConfig2, | ||
|  |     data: valueFromConfig2, | ||
|  |     baseURL: defaultToConfig2, | ||
|  |     transformRequest: defaultToConfig2, | ||
|  |     transformResponse: defaultToConfig2, | ||
|  |     paramsSerializer: defaultToConfig2, | ||
|  |     timeout: defaultToConfig2, | ||
|  |     timeoutMessage: defaultToConfig2, | ||
|  |     withCredentials: defaultToConfig2, | ||
|  |     withXSRFToken: defaultToConfig2, | ||
|  |     adapter: defaultToConfig2, | ||
|  |     responseType: defaultToConfig2, | ||
|  |     xsrfCookieName: defaultToConfig2, | ||
|  |     xsrfHeaderName: defaultToConfig2, | ||
|  |     onUploadProgress: defaultToConfig2, | ||
|  |     onDownloadProgress: defaultToConfig2, | ||
|  |     decompress: defaultToConfig2, | ||
|  |     maxContentLength: defaultToConfig2, | ||
|  |     maxBodyLength: defaultToConfig2, | ||
|  |     beforeRedirect: defaultToConfig2, | ||
|  |     transport: defaultToConfig2, | ||
|  |     httpAgent: defaultToConfig2, | ||
|  |     httpsAgent: defaultToConfig2, | ||
|  |     cancelToken: defaultToConfig2, | ||
|  |     socketPath: defaultToConfig2, | ||
|  |     responseEncoding: defaultToConfig2, | ||
|  |     validateStatus: mergeDirectKeys, | ||
|  |     headers: (a, b , prop) => mergeDeepProperties(headersToObject(a), headersToObject(b),prop, true) | ||
|  |   }; | ||
|  | 
 | ||
|  |   utils$1.forEach(Object.keys(Object.assign({}, config1, config2)), function computeConfigValue(prop) { | ||
|  |     const merge = mergeMap[prop] || mergeDeepProperties; | ||
|  |     const configValue = merge(config1[prop], config2[prop], prop); | ||
|  |     (utils$1.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue); | ||
|  |   }); | ||
|  | 
 | ||
|  |   return config; | ||
|  | } | ||
|  | 
 | ||
|  | const resolveConfig = (config) => { | ||
|  |   const newConfig = mergeConfig$1({}, config); | ||
|  | 
 | ||
|  |   let {data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth} = newConfig; | ||
|  | 
 | ||
|  |   newConfig.headers = headers = AxiosHeaders$2.from(headers); | ||
|  | 
 | ||
|  |   newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url, newConfig.allowAbsoluteUrls), config.params, config.paramsSerializer); | ||
|  | 
 | ||
|  |   // HTTP basic authentication
 | ||
|  |   if (auth) { | ||
|  |     headers.set('Authorization', 'Basic ' + | ||
|  |       btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : '')) | ||
|  |     ); | ||
|  |   } | ||
|  | 
 | ||
|  |   let contentType; | ||
|  | 
 | ||
|  |   if (utils$1.isFormData(data)) { | ||
|  |     if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) { | ||
|  |       headers.setContentType(undefined); // Let the browser set it
 | ||
|  |     } else if ((contentType = headers.getContentType()) !== false) { | ||
|  |       // fix semicolon duplication issue for ReactNative FormData implementation
 | ||
|  |       const [type, ...tokens] = contentType ? contentType.split(';').map(token => token.trim()).filter(Boolean) : []; | ||
|  |       headers.setContentType([type || 'multipart/form-data', ...tokens].join('; ')); | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   // Add xsrf header
 | ||
|  |   // This is only done if running in a standard browser environment.
 | ||
|  |   // Specifically not if we're in a web worker, or react-native.
 | ||
|  | 
 | ||
|  |   if (platform.hasStandardBrowserEnv) { | ||
|  |     withXSRFToken && utils$1.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig)); | ||
|  | 
 | ||
|  |     if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(newConfig.url))) { | ||
|  |       // Add xsrf header
 | ||
|  |       const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName); | ||
|  | 
 | ||
|  |       if (xsrfValue) { | ||
|  |         headers.set(xsrfHeaderName, xsrfValue); | ||
|  |       } | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   return newConfig; | ||
|  | }; | ||
|  | 
 | ||
|  | const isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined'; | ||
|  | 
 | ||
|  | const xhrAdapter = isXHRAdapterSupported && function (config) { | ||
|  |   return new Promise(function dispatchXhrRequest(resolve, reject) { | ||
|  |     const _config = resolveConfig(config); | ||
|  |     let requestData = _config.data; | ||
|  |     const requestHeaders = AxiosHeaders$2.from(_config.headers).normalize(); | ||
|  |     let {responseType, onUploadProgress, onDownloadProgress} = _config; | ||
|  |     let onCanceled; | ||
|  |     let uploadThrottled, downloadThrottled; | ||
|  |     let flushUpload, flushDownload; | ||
|  | 
 | ||
|  |     function done() { | ||
|  |       flushUpload && flushUpload(); // flush events
 | ||
|  |       flushDownload && flushDownload(); // flush events
 | ||
|  | 
 | ||
|  |       _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled); | ||
|  | 
 | ||
|  |       _config.signal && _config.signal.removeEventListener('abort', onCanceled); | ||
|  |     } | ||
|  | 
 | ||
|  |     let request = new XMLHttpRequest(); | ||
|  | 
 | ||
|  |     request.open(_config.method.toUpperCase(), _config.url, true); | ||
|  | 
 | ||
|  |     // Set the request timeout in MS
 | ||
|  |     request.timeout = _config.timeout; | ||
|  | 
 | ||
|  |     function onloadend() { | ||
|  |       if (!request) { | ||
|  |         return; | ||
|  |       } | ||
|  |       // Prepare the response
 | ||
|  |       const responseHeaders = AxiosHeaders$2.from( | ||
|  |         'getAllResponseHeaders' in request && request.getAllResponseHeaders() | ||
|  |       ); | ||
|  |       const responseData = !responseType || responseType === 'text' || responseType === 'json' ? | ||
|  |         request.responseText : request.response; | ||
|  |       const response = { | ||
|  |         data: responseData, | ||
|  |         status: request.status, | ||
|  |         statusText: request.statusText, | ||
|  |         headers: responseHeaders, | ||
|  |         config, | ||
|  |         request | ||
|  |       }; | ||
|  | 
 | ||
|  |       settle(function _resolve(value) { | ||
|  |         resolve(value); | ||
|  |         done(); | ||
|  |       }, function _reject(err) { | ||
|  |         reject(err); | ||
|  |         done(); | ||
|  |       }, response); | ||
|  | 
 | ||
|  |       // Clean up request
 | ||
|  |       request = null; | ||
|  |     } | ||
|  | 
 | ||
|  |     if ('onloadend' in request) { | ||
|  |       // Use onloadend if available
 | ||
|  |       request.onloadend = onloadend; | ||
|  |     } else { | ||
|  |       // Listen for ready state to emulate onloadend
 | ||
|  |       request.onreadystatechange = function handleLoad() { | ||
|  |         if (!request || request.readyState !== 4) { | ||
|  |           return; | ||
|  |         } | ||
|  | 
 | ||
|  |         // The request errored out and we didn't get a response, this will be
 | ||
|  |         // handled by onerror instead
 | ||
|  |         // With one exception: request that using file: protocol, most browsers
 | ||
|  |         // will return status as 0 even though it's a successful request
 | ||
|  |         if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) { | ||
|  |           return; | ||
|  |         } | ||
|  |         // readystate handler is calling before onerror or ontimeout handlers,
 | ||
|  |         // so we should call onloadend on the next 'tick'
 | ||
|  |         setTimeout(onloadend); | ||
|  |       }; | ||
|  |     } | ||
|  | 
 | ||
|  |     // Handle browser request cancellation (as opposed to a manual cancellation)
 | ||
|  |     request.onabort = function handleAbort() { | ||
|  |       if (!request) { | ||
|  |         return; | ||
|  |       } | ||
|  | 
 | ||
|  |       reject(new AxiosError$1('Request aborted', AxiosError$1.ECONNABORTED, config, request)); | ||
|  | 
 | ||
|  |       // Clean up request
 | ||
|  |       request = null; | ||
|  |     }; | ||
|  | 
 | ||
|  |     // Handle low level network errors
 | ||
|  |     request.onerror = function handleError() { | ||
|  |       // Real errors are hidden from us by the browser
 | ||
|  |       // onerror should only fire if it's a network error
 | ||
|  |       reject(new AxiosError$1('Network Error', AxiosError$1.ERR_NETWORK, config, request)); | ||
|  | 
 | ||
|  |       // Clean up request
 | ||
|  |       request = null; | ||
|  |     }; | ||
|  | 
 | ||
|  |     // Handle timeout
 | ||
|  |     request.ontimeout = function handleTimeout() { | ||
|  |       let timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded'; | ||
|  |       const transitional = _config.transitional || transitionalDefaults; | ||
|  |       if (_config.timeoutErrorMessage) { | ||
|  |         timeoutErrorMessage = _config.timeoutErrorMessage; | ||
|  |       } | ||
|  |       reject(new AxiosError$1( | ||
|  |         timeoutErrorMessage, | ||
|  |         transitional.clarifyTimeoutError ? AxiosError$1.ETIMEDOUT : AxiosError$1.ECONNABORTED, | ||
|  |         config, | ||
|  |         request)); | ||
|  | 
 | ||
|  |       // Clean up request
 | ||
|  |       request = null; | ||
|  |     }; | ||
|  | 
 | ||
|  |     // Remove Content-Type if data is undefined
 | ||
|  |     requestData === undefined && requestHeaders.setContentType(null); | ||
|  | 
 | ||
|  |     // Add headers to the request
 | ||
|  |     if ('setRequestHeader' in request) { | ||
|  |       utils$1.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) { | ||
|  |         request.setRequestHeader(key, val); | ||
|  |       }); | ||
|  |     } | ||
|  | 
 | ||
|  |     // Add withCredentials to request if needed
 | ||
|  |     if (!utils$1.isUndefined(_config.withCredentials)) { | ||
|  |       request.withCredentials = !!_config.withCredentials; | ||
|  |     } | ||
|  | 
 | ||
|  |     // Add responseType to request if needed
 | ||
|  |     if (responseType && responseType !== 'json') { | ||
|  |       request.responseType = _config.responseType; | ||
|  |     } | ||
|  | 
 | ||
|  |     // Handle progress if needed
 | ||
|  |     if (onDownloadProgress) { | ||
|  |       ([downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true)); | ||
|  |       request.addEventListener('progress', downloadThrottled); | ||
|  |     } | ||
|  | 
 | ||
|  |     // Not all browsers support upload events
 | ||
|  |     if (onUploadProgress && request.upload) { | ||
|  |       ([uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress)); | ||
|  | 
 | ||
|  |       request.upload.addEventListener('progress', uploadThrottled); | ||
|  | 
 | ||
|  |       request.upload.addEventListener('loadend', flushUpload); | ||
|  |     } | ||
|  | 
 | ||
|  |     if (_config.cancelToken || _config.signal) { | ||
|  |       // Handle cancellation
 | ||
|  |       // eslint-disable-next-line func-names
 | ||
|  |       onCanceled = cancel => { | ||
|  |         if (!request) { | ||
|  |           return; | ||
|  |         } | ||
|  |         reject(!cancel || cancel.type ? new CanceledError$1(null, config, request) : cancel); | ||
|  |         request.abort(); | ||
|  |         request = null; | ||
|  |       }; | ||
|  | 
 | ||
|  |       _config.cancelToken && _config.cancelToken.subscribe(onCanceled); | ||
|  |       if (_config.signal) { | ||
|  |         _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled); | ||
|  |       } | ||
|  |     } | ||
|  | 
 | ||
|  |     const protocol = parseProtocol(_config.url); | ||
|  | 
 | ||
|  |     if (protocol && platform.protocols.indexOf(protocol) === -1) { | ||
|  |       reject(new AxiosError$1('Unsupported protocol ' + protocol + ':', AxiosError$1.ERR_BAD_REQUEST, config)); | ||
|  |       return; | ||
|  |     } | ||
|  | 
 | ||
|  | 
 | ||
|  |     // Send the request
 | ||
|  |     request.send(requestData || null); | ||
|  |   }); | ||
|  | }; | ||
|  | 
 | ||
|  | const composeSignals = (signals, timeout) => { | ||
|  |   const {length} = (signals = signals ? signals.filter(Boolean) : []); | ||
|  | 
 | ||
|  |   if (timeout || length) { | ||
|  |     let controller = new AbortController(); | ||
|  | 
 | ||
|  |     let aborted; | ||
|  | 
 | ||
|  |     const onabort = function (reason) { | ||
|  |       if (!aborted) { | ||
|  |         aborted = true; | ||
|  |         unsubscribe(); | ||
|  |         const err = reason instanceof Error ? reason : this.reason; | ||
|  |         controller.abort(err instanceof AxiosError$1 ? err : new CanceledError$1(err instanceof Error ? err.message : err)); | ||
|  |       } | ||
|  |     }; | ||
|  | 
 | ||
|  |     let timer = timeout && setTimeout(() => { | ||
|  |       timer = null; | ||
|  |       onabort(new AxiosError$1(`timeout ${timeout} of ms exceeded`, AxiosError$1.ETIMEDOUT)); | ||
|  |     }, timeout); | ||
|  | 
 | ||
|  |     const unsubscribe = () => { | ||
|  |       if (signals) { | ||
|  |         timer && clearTimeout(timer); | ||
|  |         timer = null; | ||
|  |         signals.forEach(signal => { | ||
|  |           signal.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort); | ||
|  |         }); | ||
|  |         signals = null; | ||
|  |       } | ||
|  |     }; | ||
|  | 
 | ||
|  |     signals.forEach((signal) => signal.addEventListener('abort', onabort)); | ||
|  | 
 | ||
|  |     const {signal} = controller; | ||
|  | 
 | ||
|  |     signal.unsubscribe = () => utils$1.asap(unsubscribe); | ||
|  | 
 | ||
|  |     return signal; | ||
|  |   } | ||
|  | }; | ||
|  | 
 | ||
|  | const composeSignals$1 = composeSignals; | ||
|  | 
 | ||
|  | const streamChunk = function* (chunk, chunkSize) { | ||
|  |   let len = chunk.byteLength; | ||
|  | 
 | ||
|  |   if (!chunkSize || len < chunkSize) { | ||
|  |     yield chunk; | ||
|  |     return; | ||
|  |   } | ||
|  | 
 | ||
|  |   let pos = 0; | ||
|  |   let end; | ||
|  | 
 | ||
|  |   while (pos < len) { | ||
|  |     end = pos + chunkSize; | ||
|  |     yield chunk.slice(pos, end); | ||
|  |     pos = end; | ||
|  |   } | ||
|  | }; | ||
|  | 
 | ||
|  | const readBytes = async function* (iterable, chunkSize) { | ||
|  |   for await (const chunk of readStream(iterable)) { | ||
|  |     yield* streamChunk(chunk, chunkSize); | ||
|  |   } | ||
|  | }; | ||
|  | 
 | ||
|  | const readStream = async function* (stream) { | ||
|  |   if (stream[Symbol.asyncIterator]) { | ||
|  |     yield* stream; | ||
|  |     return; | ||
|  |   } | ||
|  | 
 | ||
|  |   const reader = stream.getReader(); | ||
|  |   try { | ||
|  |     for (;;) { | ||
|  |       const {done, value} = await reader.read(); | ||
|  |       if (done) { | ||
|  |         break; | ||
|  |       } | ||
|  |       yield value; | ||
|  |     } | ||
|  |   } finally { | ||
|  |     await reader.cancel(); | ||
|  |   } | ||
|  | }; | ||
|  | 
 | ||
|  | const trackStream = (stream, chunkSize, onProgress, onFinish) => { | ||
|  |   const iterator = readBytes(stream, chunkSize); | ||
|  | 
 | ||
|  |   let bytes = 0; | ||
|  |   let done; | ||
|  |   let _onFinish = (e) => { | ||
|  |     if (!done) { | ||
|  |       done = true; | ||
|  |       onFinish && onFinish(e); | ||
|  |     } | ||
|  |   }; | ||
|  | 
 | ||
|  |   return new ReadableStream({ | ||
|  |     async pull(controller) { | ||
|  |       try { | ||
|  |         const {done, value} = await iterator.next(); | ||
|  | 
 | ||
|  |         if (done) { | ||
|  |          _onFinish(); | ||
|  |           controller.close(); | ||
|  |           return; | ||
|  |         } | ||
|  | 
 | ||
|  |         let len = value.byteLength; | ||
|  |         if (onProgress) { | ||
|  |           let loadedBytes = bytes += len; | ||
|  |           onProgress(loadedBytes); | ||
|  |         } | ||
|  |         controller.enqueue(new Uint8Array(value)); | ||
|  |       } catch (err) { | ||
|  |         _onFinish(err); | ||
|  |         throw err; | ||
|  |       } | ||
|  |     }, | ||
|  |     cancel(reason) { | ||
|  |       _onFinish(reason); | ||
|  |       return iterator.return(); | ||
|  |     } | ||
|  |   }, { | ||
|  |     highWaterMark: 2 | ||
|  |   }) | ||
|  | }; | ||
|  | 
 | ||
|  | const isFetchSupported = typeof fetch === 'function' && typeof Request === 'function' && typeof Response === 'function'; | ||
|  | const isReadableStreamSupported = isFetchSupported && typeof ReadableStream === 'function'; | ||
|  | 
 | ||
|  | // used only inside the fetch adapter
 | ||
|  | const encodeText = isFetchSupported && (typeof TextEncoder === 'function' ? | ||
|  |     ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) : | ||
|  |     async (str) => new Uint8Array(await new Response(str).arrayBuffer()) | ||
|  | ); | ||
|  | 
 | ||
|  | const test = (fn, ...args) => { | ||
|  |   try { | ||
|  |     return !!fn(...args); | ||
|  |   } catch (e) { | ||
|  |     return false | ||
|  |   } | ||
|  | }; | ||
|  | 
 | ||
|  | const supportsRequestStream = isReadableStreamSupported && test(() => { | ||
|  |   let duplexAccessed = false; | ||
|  | 
 | ||
|  |   const hasContentType = new Request(platform.origin, { | ||
|  |     body: new ReadableStream(), | ||
|  |     method: 'POST', | ||
|  |     get duplex() { | ||
|  |       duplexAccessed = true; | ||
|  |       return 'half'; | ||
|  |     }, | ||
|  |   }).headers.has('Content-Type'); | ||
|  | 
 | ||
|  |   return duplexAccessed && !hasContentType; | ||
|  | }); | ||
|  | 
 | ||
|  | const DEFAULT_CHUNK_SIZE = 64 * 1024; | ||
|  | 
 | ||
|  | const supportsResponseStream = isReadableStreamSupported && | ||
|  |   test(() => utils$1.isReadableStream(new Response('').body)); | ||
|  | 
 | ||
|  | 
 | ||
|  | const resolvers = { | ||
|  |   stream: supportsResponseStream && ((res) => res.body) | ||
|  | }; | ||
|  | 
 | ||
|  | isFetchSupported && (((res) => { | ||
|  |   ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => { | ||
|  |     !resolvers[type] && (resolvers[type] = utils$1.isFunction(res[type]) ? (res) => res[type]() : | ||
|  |       (_, config) => { | ||
|  |         throw new AxiosError$1(`Response type '${type}' is not supported`, AxiosError$1.ERR_NOT_SUPPORT, config); | ||
|  |       }); | ||
|  |   }); | ||
|  | })(new Response)); | ||
|  | 
 | ||
|  | const getBodyLength = async (body) => { | ||
|  |   if (body == null) { | ||
|  |     return 0; | ||
|  |   } | ||
|  | 
 | ||
|  |   if(utils$1.isBlob(body)) { | ||
|  |     return body.size; | ||
|  |   } | ||
|  | 
 | ||
|  |   if(utils$1.isSpecCompliantForm(body)) { | ||
|  |     const _request = new Request(platform.origin, { | ||
|  |       method: 'POST', | ||
|  |       body, | ||
|  |     }); | ||
|  |     return (await _request.arrayBuffer()).byteLength; | ||
|  |   } | ||
|  | 
 | ||
|  |   if(utils$1.isArrayBufferView(body) || utils$1.isArrayBuffer(body)) { | ||
|  |     return body.byteLength; | ||
|  |   } | ||
|  | 
 | ||
|  |   if(utils$1.isURLSearchParams(body)) { | ||
|  |     body = body + ''; | ||
|  |   } | ||
|  | 
 | ||
|  |   if(utils$1.isString(body)) { | ||
|  |     return (await encodeText(body)).byteLength; | ||
|  |   } | ||
|  | }; | ||
|  | 
 | ||
|  | const resolveBodyLength = async (headers, body) => { | ||
|  |   const length = utils$1.toFiniteNumber(headers.getContentLength()); | ||
|  | 
 | ||
|  |   return length == null ? getBodyLength(body) : length; | ||
|  | }; | ||
|  | 
 | ||
|  | const fetchAdapter = isFetchSupported && (async (config) => { | ||
|  |   let { | ||
|  |     url, | ||
|  |     method, | ||
|  |     data, | ||
|  |     signal, | ||
|  |     cancelToken, | ||
|  |     timeout, | ||
|  |     onDownloadProgress, | ||
|  |     onUploadProgress, | ||
|  |     responseType, | ||
|  |     headers, | ||
|  |     withCredentials = 'same-origin', | ||
|  |     fetchOptions | ||
|  |   } = resolveConfig(config); | ||
|  | 
 | ||
|  |   responseType = responseType ? (responseType + '').toLowerCase() : 'text'; | ||
|  | 
 | ||
|  |   let composedSignal = composeSignals$1([signal, cancelToken && cancelToken.toAbortSignal()], timeout); | ||
|  | 
 | ||
|  |   let request; | ||
|  | 
 | ||
|  |   const unsubscribe = composedSignal && composedSignal.unsubscribe && (() => { | ||
|  |       composedSignal.unsubscribe(); | ||
|  |   }); | ||
|  | 
 | ||
|  |   let requestContentLength; | ||
|  | 
 | ||
|  |   try { | ||
|  |     if ( | ||
|  |       onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head' && | ||
|  |       (requestContentLength = await resolveBodyLength(headers, data)) !== 0 | ||
|  |     ) { | ||
|  |       let _request = new Request(url, { | ||
|  |         method: 'POST', | ||
|  |         body: data, | ||
|  |         duplex: "half" | ||
|  |       }); | ||
|  | 
 | ||
|  |       let contentTypeHeader; | ||
|  | 
 | ||
|  |       if (utils$1.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) { | ||
|  |         headers.setContentType(contentTypeHeader); | ||
|  |       } | ||
|  | 
 | ||
|  |       if (_request.body) { | ||
|  |         const [onProgress, flush] = progressEventDecorator( | ||
|  |           requestContentLength, | ||
|  |           progressEventReducer(asyncDecorator(onUploadProgress)) | ||
|  |         ); | ||
|  | 
 | ||
|  |         data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush); | ||
|  |       } | ||
|  |     } | ||
|  | 
 | ||
|  |     if (!utils$1.isString(withCredentials)) { | ||
|  |       withCredentials = withCredentials ? 'include' : 'omit'; | ||
|  |     } | ||
|  | 
 | ||
|  |     // Cloudflare Workers throws when credentials are defined
 | ||
|  |     // see https://github.com/cloudflare/workerd/issues/902
 | ||
|  |     const isCredentialsSupported = "credentials" in Request.prototype; | ||
|  |     request = new Request(url, { | ||
|  |       ...fetchOptions, | ||
|  |       signal: composedSignal, | ||
|  |       method: method.toUpperCase(), | ||
|  |       headers: headers.normalize().toJSON(), | ||
|  |       body: data, | ||
|  |       duplex: "half", | ||
|  |       credentials: isCredentialsSupported ? withCredentials : undefined | ||
|  |     }); | ||
|  | 
 | ||
|  |     let response = await fetch(request); | ||
|  | 
 | ||
|  |     const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response'); | ||
|  | 
 | ||
|  |     if (supportsResponseStream && (onDownloadProgress || (isStreamResponse && unsubscribe))) { | ||
|  |       const options = {}; | ||
|  | 
 | ||
|  |       ['status', 'statusText', 'headers'].forEach(prop => { | ||
|  |         options[prop] = response[prop]; | ||
|  |       }); | ||
|  | 
 | ||
|  |       const responseContentLength = utils$1.toFiniteNumber(response.headers.get('content-length')); | ||
|  | 
 | ||
|  |       const [onProgress, flush] = onDownloadProgress && progressEventDecorator( | ||
|  |         responseContentLength, | ||
|  |         progressEventReducer(asyncDecorator(onDownloadProgress), true) | ||
|  |       ) || []; | ||
|  | 
 | ||
|  |       response = new Response( | ||
|  |         trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => { | ||
|  |           flush && flush(); | ||
|  |           unsubscribe && unsubscribe(); | ||
|  |         }), | ||
|  |         options | ||
|  |       ); | ||
|  |     } | ||
|  | 
 | ||
|  |     responseType = responseType || 'text'; | ||
|  | 
 | ||
|  |     let responseData = await resolvers[utils$1.findKey(resolvers, responseType) || 'text'](response, config); | ||
|  | 
 | ||
|  |     !isStreamResponse && unsubscribe && unsubscribe(); | ||
|  | 
 | ||
|  |     return await new Promise((resolve, reject) => { | ||
|  |       settle(resolve, reject, { | ||
|  |         data: responseData, | ||
|  |         headers: AxiosHeaders$2.from(response.headers), | ||
|  |         status: response.status, | ||
|  |         statusText: response.statusText, | ||
|  |         config, | ||
|  |         request | ||
|  |       }); | ||
|  |     }) | ||
|  |   } catch (err) { | ||
|  |     unsubscribe && unsubscribe(); | ||
|  | 
 | ||
|  |     if (err && err.name === 'TypeError' && /Load failed|fetch/i.test(err.message)) { | ||
|  |       throw Object.assign( | ||
|  |         new AxiosError$1('Network Error', AxiosError$1.ERR_NETWORK, config, request), | ||
|  |         { | ||
|  |           cause: err.cause || err | ||
|  |         } | ||
|  |       ) | ||
|  |     } | ||
|  | 
 | ||
|  |     throw AxiosError$1.from(err, err && err.code, config, request); | ||
|  |   } | ||
|  | }); | ||
|  | 
 | ||
|  | const knownAdapters = { | ||
|  |   http: httpAdapter, | ||
|  |   xhr: xhrAdapter, | ||
|  |   fetch: fetchAdapter | ||
|  | }; | ||
|  | 
 | ||
|  | utils$1.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$1.isFunction(adapter) || adapter === null || adapter === false; | ||
|  | 
 | ||
|  | const adapters = { | ||
|  |   getAdapter: (adapters) => { | ||
|  |     adapters = utils$1.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$1(`Unknown adapter '${id}'`); | ||
|  |         } | ||
|  |       } | ||
|  | 
 | ||
|  |       if (adapter) { | ||
|  |         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$1( | ||
|  |         `There is no suitable adapter to dispatch the request ` + s, | ||
|  |         'ERR_NOT_SUPPORT' | ||
|  |       ); | ||
|  |     } | ||
|  | 
 | ||
|  |     return adapter; | ||
|  |   }, | ||
|  |   adapters: knownAdapters | ||
|  | }; | ||
|  | 
 | ||
|  | /** | ||
|  |  * Throws a `CanceledError` if cancellation has been requested. | ||
|  |  * | ||
|  |  * @param {Object} config The config that is to be used for the request | ||
|  |  * | ||
|  |  * @returns {void} | ||
|  |  */ | ||
|  | function throwIfCancellationRequested(config) { | ||
|  |   if (config.cancelToken) { | ||
|  |     config.cancelToken.throwIfRequested(); | ||
|  |   } | ||
|  | 
 | ||
|  |   if (config.signal && config.signal.aborted) { | ||
|  |     throw new CanceledError$1(null, config); | ||
|  |   } | ||
|  | } | ||
|  | 
 | ||
|  | /** | ||
|  |  * Dispatch a request to the server using the configured adapter. | ||
|  |  * | ||
|  |  * @param {object} config The config that is to be used for the request | ||
|  |  * | ||
|  |  * @returns {Promise} The Promise to be fulfilled | ||
|  |  */ | ||
|  | function dispatchRequest(config) { | ||
|  |   throwIfCancellationRequested(config); | ||
|  | 
 | ||
|  |   config.headers = AxiosHeaders$2.from(config.headers); | ||
|  | 
 | ||
|  |   // Transform request data
 | ||
|  |   config.data = transformData.call( | ||
|  |     config, | ||
|  |     config.transformRequest | ||
|  |   ); | ||
|  | 
 | ||
|  |   if (['post', 'put', 'patch'].indexOf(config.method) !== -1) { | ||
|  |     config.headers.setContentType('application/x-www-form-urlencoded', false); | ||
|  |   } | ||
|  | 
 | ||
|  |   const adapter = adapters.getAdapter(config.adapter || defaults$1.adapter); | ||
|  | 
 | ||
|  |   return adapter(config).then(function onAdapterResolution(response) { | ||
|  |     throwIfCancellationRequested(config); | ||
|  | 
 | ||
|  |     // Transform response data
 | ||
|  |     response.data = transformData.call( | ||
|  |       config, | ||
|  |       config.transformResponse, | ||
|  |       response | ||
|  |     ); | ||
|  | 
 | ||
|  |     response.headers = AxiosHeaders$2.from(response.headers); | ||
|  | 
 | ||
|  |     return response; | ||
|  |   }, function onAdapterRejection(reason) { | ||
|  |     if (!isCancel$1(reason)) { | ||
|  |       throwIfCancellationRequested(config); | ||
|  | 
 | ||
|  |       // Transform response data
 | ||
|  |       if (reason && reason.response) { | ||
|  |         reason.response.data = transformData.call( | ||
|  |           config, | ||
|  |           config.transformResponse, | ||
|  |           reason.response | ||
|  |         ); | ||
|  |         reason.response.headers = AxiosHeaders$2.from(reason.response.headers); | ||
|  |       } | ||
|  |     } | ||
|  | 
 | ||
|  |     return Promise.reject(reason); | ||
|  |   }); | ||
|  | } | ||
|  | 
 | ||
|  | const VERSION$1 = "1.9.0"; | ||
|  | 
 | ||
|  | const validators$1 = {}; | ||
|  | 
 | ||
|  | // eslint-disable-next-line func-names
 | ||
|  | ['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => { | ||
|  |   validators$1[type] = function validator(thing) { | ||
|  |     return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type; | ||
|  |   }; | ||
|  | }); | ||
|  | 
 | ||
|  | const deprecatedWarnings = {}; | ||
|  | 
 | ||
|  | /** | ||
|  |  * Transitional option validator | ||
|  |  * | ||
|  |  * @param {function|boolean?} validator - set to false if the transitional option has been removed | ||
|  |  * @param {string?} version - deprecated version / removed since version | ||
|  |  * @param {string?} message - some message with additional info | ||
|  |  * | ||
|  |  * @returns {function} | ||
|  |  */ | ||
|  | validators$1.transitional = function transitional(validator, version, message) { | ||
|  |   function formatMessage(opt, desc) { | ||
|  |     return '[Axios v' + VERSION$1 + '] Transitional option \'' + opt + '\'' + desc + (message ? '. ' + message : ''); | ||
|  |   } | ||
|  | 
 | ||
|  |   // eslint-disable-next-line func-names
 | ||
|  |   return (value, opt, opts) => { | ||
|  |     if (validator === false) { | ||
|  |       throw new AxiosError$1( | ||
|  |         formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')), | ||
|  |         AxiosError$1.ERR_DEPRECATED | ||
|  |       ); | ||
|  |     } | ||
|  | 
 | ||
|  |     if (version && !deprecatedWarnings[opt]) { | ||
|  |       deprecatedWarnings[opt] = true; | ||
|  |       // eslint-disable-next-line no-console
 | ||
|  |       console.warn( | ||
|  |         formatMessage( | ||
|  |           opt, | ||
|  |           ' has been deprecated since v' + version + ' and will be removed in the near future' | ||
|  |         ) | ||
|  |       ); | ||
|  |     } | ||
|  | 
 | ||
|  |     return validator ? validator(value, opt, opts) : true; | ||
|  |   }; | ||
|  | }; | ||
|  | 
 | ||
|  | validators$1.spelling = function spelling(correctSpelling) { | ||
|  |   return (value, opt) => { | ||
|  |     // eslint-disable-next-line no-console
 | ||
|  |     console.warn(`${opt} is likely a misspelling of ${correctSpelling}`); | ||
|  |     return true; | ||
|  |   } | ||
|  | }; | ||
|  | 
 | ||
|  | /** | ||
|  |  * Assert object's properties type | ||
|  |  * | ||
|  |  * @param {object} options | ||
|  |  * @param {object} schema | ||
|  |  * @param {boolean?} allowUnknown | ||
|  |  * | ||
|  |  * @returns {object} | ||
|  |  */ | ||
|  | 
 | ||
|  | function assertOptions(options, schema, allowUnknown) { | ||
|  |   if (typeof options !== 'object') { | ||
|  |     throw new AxiosError$1('options must be an object', AxiosError$1.ERR_BAD_OPTION_VALUE); | ||
|  |   } | ||
|  |   const keys = Object.keys(options); | ||
|  |   let i = keys.length; | ||
|  |   while (i-- > 0) { | ||
|  |     const opt = keys[i]; | ||
|  |     const validator = schema[opt]; | ||
|  |     if (validator) { | ||
|  |       const value = options[opt]; | ||
|  |       const result = value === undefined || validator(value, opt, options); | ||
|  |       if (result !== true) { | ||
|  |         throw new AxiosError$1('option ' + opt + ' must be ' + result, AxiosError$1.ERR_BAD_OPTION_VALUE); | ||
|  |       } | ||
|  |       continue; | ||
|  |     } | ||
|  |     if (allowUnknown !== true) { | ||
|  |       throw new AxiosError$1('Unknown option ' + opt, AxiosError$1.ERR_BAD_OPTION); | ||
|  |     } | ||
|  |   } | ||
|  | } | ||
|  | 
 | ||
|  | const validator = { | ||
|  |   assertOptions, | ||
|  |   validators: validators$1 | ||
|  | }; | ||
|  | 
 | ||
|  | const validators = validator.validators; | ||
|  | 
 | ||
|  | /** | ||
|  |  * Create a new instance of Axios | ||
|  |  * | ||
|  |  * @param {Object} instanceConfig The default config for the instance | ||
|  |  * | ||
|  |  * @return {Axios} A new instance of Axios | ||
|  |  */ | ||
|  | class Axios$1 { | ||
|  |   constructor(instanceConfig) { | ||
|  |     this.defaults = instanceConfig || {}; | ||
|  |     this.interceptors = { | ||
|  |       request: new InterceptorManager$1(), | ||
|  |       response: new InterceptorManager$1() | ||
|  |     }; | ||
|  |   } | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Dispatch a request | ||
|  |    * | ||
|  |    * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults) | ||
|  |    * @param {?Object} config | ||
|  |    * | ||
|  |    * @returns {Promise} The Promise to be fulfilled | ||
|  |    */ | ||
|  |   async request(configOrUrl, config) { | ||
|  |     try { | ||
|  |       return await this._request(configOrUrl, config); | ||
|  |     } catch (err) { | ||
|  |       if (err instanceof Error) { | ||
|  |         let dummy = {}; | ||
|  | 
 | ||
|  |         Error.captureStackTrace ? Error.captureStackTrace(dummy) : (dummy = new Error()); | ||
|  | 
 | ||
|  |         // slice off the Error: ... line
 | ||
|  |         const stack = dummy.stack ? dummy.stack.replace(/^.+\n/, '') : ''; | ||
|  |         try { | ||
|  |           if (!err.stack) { | ||
|  |             err.stack = stack; | ||
|  |             // match without the 2 top stack lines
 | ||
|  |           } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\n.+\n/, ''))) { | ||
|  |             err.stack += '\n' + stack; | ||
|  |           } | ||
|  |         } catch (e) { | ||
|  |           // ignore the case where "stack" is an un-writable property
 | ||
|  |         } | ||
|  |       } | ||
|  | 
 | ||
|  |       throw err; | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   _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$1(this.defaults, config); | ||
|  | 
 | ||
|  |     const {transitional, paramsSerializer, headers} = config; | ||
|  | 
 | ||
|  |     if (transitional !== undefined) { | ||
|  |       validator.assertOptions(transitional, { | ||
|  |         silentJSONParsing: validators.transitional(validators.boolean), | ||
|  |         forcedJSONParsing: validators.transitional(validators.boolean), | ||
|  |         clarifyTimeoutError: validators.transitional(validators.boolean) | ||
|  |       }, false); | ||
|  |     } | ||
|  | 
 | ||
|  |     if (paramsSerializer != null) { | ||
|  |       if (utils$1.isFunction(paramsSerializer)) { | ||
|  |         config.paramsSerializer = { | ||
|  |           serialize: paramsSerializer | ||
|  |         }; | ||
|  |       } else { | ||
|  |         validator.assertOptions(paramsSerializer, { | ||
|  |           encode: validators.function, | ||
|  |           serialize: validators.function | ||
|  |         }, true); | ||
|  |       } | ||
|  |     } | ||
|  | 
 | ||
|  |     // Set config.allowAbsoluteUrls
 | ||
|  |     if (config.allowAbsoluteUrls !== undefined) ; else if (this.defaults.allowAbsoluteUrls !== undefined) { | ||
|  |       config.allowAbsoluteUrls = this.defaults.allowAbsoluteUrls; | ||
|  |     } else { | ||
|  |       config.allowAbsoluteUrls = true; | ||
|  |     } | ||
|  | 
 | ||
|  |     validator.assertOptions(config, { | ||
|  |       baseUrl: validators.spelling('baseURL'), | ||
|  |       withXsrfToken: validators.spelling('withXSRFToken') | ||
|  |     }, true); | ||
|  | 
 | ||
|  |     // Set config.method
 | ||
|  |     config.method = (config.method || this.defaults.method || 'get').toLowerCase(); | ||
|  | 
 | ||
|  |     // Flatten headers
 | ||
|  |     let contextHeaders = headers && utils$1.merge( | ||
|  |       headers.common, | ||
|  |       headers[config.method] | ||
|  |     ); | ||
|  | 
 | ||
|  |     headers && utils$1.forEach( | ||
|  |       ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'], | ||
|  |       (method) => { | ||
|  |         delete headers[method]; | ||
|  |       } | ||
|  |     ); | ||
|  | 
 | ||
|  |     config.headers = AxiosHeaders$2.concat(contextHeaders, headers); | ||
|  | 
 | ||
|  |     // filter out skipped interceptors
 | ||
|  |     const requestInterceptorChain = []; | ||
|  |     let 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); | ||
|  |     }); | ||
|  | 
 | ||
|  |     const responseInterceptorChain = []; | ||
|  |     this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) { | ||
|  |       responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected); | ||
|  |     }); | ||
|  | 
 | ||
|  |     let promise; | ||
|  |     let i = 0; | ||
|  |     let len; | ||
|  | 
 | ||
|  |     if (!synchronousRequestInterceptors) { | ||
|  |       const chain = [dispatchRequest.bind(this), undefined]; | ||
|  |       chain.unshift.apply(chain, requestInterceptorChain); | ||
|  |       chain.push.apply(chain, responseInterceptorChain); | ||
|  |       len = chain.length; | ||
|  | 
 | ||
|  |       promise = Promise.resolve(config); | ||
|  | 
 | ||
|  |       while (i < len) { | ||
|  |         promise = promise.then(chain[i++], chain[i++]); | ||
|  |       } | ||
|  | 
 | ||
|  |       return promise; | ||
|  |     } | ||
|  | 
 | ||
|  |     len = requestInterceptorChain.length; | ||
|  | 
 | ||
|  |     let newConfig = config; | ||
|  | 
 | ||
|  |     i = 0; | ||
|  | 
 | ||
|  |     while (i < len) { | ||
|  |       const onFulfilled = requestInterceptorChain[i++]; | ||
|  |       const onRejected = requestInterceptorChain[i++]; | ||
|  |       try { | ||
|  |         newConfig = onFulfilled(newConfig); | ||
|  |       } catch (error) { | ||
|  |         onRejected.call(this, error); | ||
|  |         break; | ||
|  |       } | ||
|  |     } | ||
|  | 
 | ||
|  |     try { | ||
|  |       promise = dispatchRequest.call(this, newConfig); | ||
|  |     } catch (error) { | ||
|  |       return Promise.reject(error); | ||
|  |     } | ||
|  | 
 | ||
|  |     i = 0; | ||
|  |     len = responseInterceptorChain.length; | ||
|  | 
 | ||
|  |     while (i < len) { | ||
|  |       promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]); | ||
|  |     } | ||
|  | 
 | ||
|  |     return promise; | ||
|  |   } | ||
|  | 
 | ||
|  |   getUri(config) { | ||
|  |     config = mergeConfig$1(this.defaults, config); | ||
|  |     const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls); | ||
|  |     return buildURL(fullPath, config.params, config.paramsSerializer); | ||
|  |   } | ||
|  | } | ||
|  | 
 | ||
|  | // Provide aliases for supported request methods
 | ||
|  | utils$1.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) { | ||
|  |   /*eslint func-names:0*/ | ||
|  |   Axios$1.prototype[method] = function(url, config) { | ||
|  |     return this.request(mergeConfig$1(config || {}, { | ||
|  |       method, | ||
|  |       url, | ||
|  |       data: (config || {}).data | ||
|  |     })); | ||
|  |   }; | ||
|  | }); | ||
|  | 
 | ||
|  | utils$1.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) { | ||
|  |   /*eslint func-names:0*/ | ||
|  | 
 | ||
|  |   function generateHTTPMethod(isForm) { | ||
|  |     return function httpMethod(url, data, config) { | ||
|  |       return this.request(mergeConfig$1(config || {}, { | ||
|  |         method, | ||
|  |         headers: isForm ? { | ||
|  |           'Content-Type': 'multipart/form-data' | ||
|  |         } : {}, | ||
|  |         url, | ||
|  |         data | ||
|  |       })); | ||
|  |     }; | ||
|  |   } | ||
|  | 
 | ||
|  |   Axios$1.prototype[method] = generateHTTPMethod(); | ||
|  | 
 | ||
|  |   Axios$1.prototype[method + 'Form'] = generateHTTPMethod(true); | ||
|  | }); | ||
|  | 
 | ||
|  | const Axios$2 = Axios$1; | ||
|  | 
 | ||
|  | /** | ||
|  |  * A `CancelToken` is an object that can be used to request cancellation of an operation. | ||
|  |  * | ||
|  |  * @param {Function} executor The executor function. | ||
|  |  * | ||
|  |  * @returns {CancelToken} | ||
|  |  */ | ||
|  | class CancelToken$1 { | ||
|  |   constructor(executor) { | ||
|  |     if (typeof executor !== 'function') { | ||
|  |       throw new TypeError('executor must be a function.'); | ||
|  |     } | ||
|  | 
 | ||
|  |     let resolvePromise; | ||
|  | 
 | ||
|  |     this.promise = new Promise(function promiseExecutor(resolve) { | ||
|  |       resolvePromise = resolve; | ||
|  |     }); | ||
|  | 
 | ||
|  |     const token = this; | ||
|  | 
 | ||
|  |     // eslint-disable-next-line func-names
 | ||
|  |     this.promise.then(cancel => { | ||
|  |       if (!token._listeners) return; | ||
|  | 
 | ||
|  |       let i = token._listeners.length; | ||
|  | 
 | ||
|  |       while (i-- > 0) { | ||
|  |         token._listeners[i](cancel); | ||
|  |       } | ||
|  |       token._listeners = null; | ||
|  |     }); | ||
|  | 
 | ||
|  |     // eslint-disable-next-line func-names
 | ||
|  |     this.promise.then = onfulfilled => { | ||
|  |       let _resolve; | ||
|  |       // eslint-disable-next-line func-names
 | ||
|  |       const promise = new Promise(resolve => { | ||
|  |         token.subscribe(resolve); | ||
|  |         _resolve = resolve; | ||
|  |       }).then(onfulfilled); | ||
|  | 
 | ||
|  |       promise.cancel = function reject() { | ||
|  |         token.unsubscribe(_resolve); | ||
|  |       }; | ||
|  | 
 | ||
|  |       return promise; | ||
|  |     }; | ||
|  | 
 | ||
|  |     executor(function cancel(message, config, request) { | ||
|  |       if (token.reason) { | ||
|  |         // Cancellation has already been requested
 | ||
|  |         return; | ||
|  |       } | ||
|  | 
 | ||
|  |       token.reason = new CanceledError$1(message, config, request); | ||
|  |       resolvePromise(token.reason); | ||
|  |     }); | ||
|  |   } | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Throws a `CanceledError` if cancellation has been requested. | ||
|  |    */ | ||
|  |   throwIfRequested() { | ||
|  |     if (this.reason) { | ||
|  |       throw this.reason; | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Subscribe to the cancel signal | ||
|  |    */ | ||
|  | 
 | ||
|  |   subscribe(listener) { | ||
|  |     if (this.reason) { | ||
|  |       listener(this.reason); | ||
|  |       return; | ||
|  |     } | ||
|  | 
 | ||
|  |     if (this._listeners) { | ||
|  |       this._listeners.push(listener); | ||
|  |     } else { | ||
|  |       this._listeners = [listener]; | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Unsubscribe from the cancel signal | ||
|  |    */ | ||
|  | 
 | ||
|  |   unsubscribe(listener) { | ||
|  |     if (!this._listeners) { | ||
|  |       return; | ||
|  |     } | ||
|  |     const index = this._listeners.indexOf(listener); | ||
|  |     if (index !== -1) { | ||
|  |       this._listeners.splice(index, 1); | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   toAbortSignal() { | ||
|  |     const controller = new AbortController(); | ||
|  | 
 | ||
|  |     const abort = (err) => { | ||
|  |       controller.abort(err); | ||
|  |     }; | ||
|  | 
 | ||
|  |     this.subscribe(abort); | ||
|  | 
 | ||
|  |     controller.signal.unsubscribe = () => this.unsubscribe(abort); | ||
|  | 
 | ||
|  |     return controller.signal; | ||
|  |   } | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Returns an object that contains a new `CancelToken` and a function that, when called, | ||
|  |    * cancels the `CancelToken`. | ||
|  |    */ | ||
|  |   static source() { | ||
|  |     let cancel; | ||
|  |     const token = new CancelToken$1(function executor(c) { | ||
|  |       cancel = c; | ||
|  |     }); | ||
|  |     return { | ||
|  |       token, | ||
|  |       cancel | ||
|  |     }; | ||
|  |   } | ||
|  | } | ||
|  | 
 | ||
|  | const CancelToken$2 = CancelToken$1; | ||
|  | 
 | ||
|  | /** | ||
|  |  * Syntactic sugar for invoking a function and expanding an array for arguments. | ||
|  |  * | ||
|  |  * Common use case would be to use `Function.prototype.apply`. | ||
|  |  * | ||
|  |  *  ```js
 | ||
|  |  *  function f(x, y, z) {} | ||
|  |  *  var args = [1, 2, 3]; | ||
|  |  *  f.apply(null, args); | ||
|  |  *  ```
 | ||
|  |  * | ||
|  |  * With `spread` this example can be re-written. | ||
|  |  * | ||
|  |  *  ```js
 | ||
|  |  *  spread(function(x, y, z) {})([1, 2, 3]); | ||
|  |  *  ```
 | ||
|  |  * | ||
|  |  * @param {Function} callback | ||
|  |  * | ||
|  |  * @returns {Function} | ||
|  |  */ | ||
|  | function spread$1(callback) { | ||
|  |   return function wrap(arr) { | ||
|  |     return callback.apply(null, arr); | ||
|  |   }; | ||
|  | } | ||
|  | 
 | ||
|  | /** | ||
|  |  * Determines whether the payload is an error thrown by Axios | ||
|  |  * | ||
|  |  * @param {*} payload The value to test | ||
|  |  * | ||
|  |  * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false | ||
|  |  */ | ||
|  | function isAxiosError$1(payload) { | ||
|  |   return utils$1.isObject(payload) && (payload.isAxiosError === true); | ||
|  | } | ||
|  | 
 | ||
|  | const HttpStatusCode$1 = { | ||
|  |   Continue: 100, | ||
|  |   SwitchingProtocols: 101, | ||
|  |   Processing: 102, | ||
|  |   EarlyHints: 103, | ||
|  |   Ok: 200, | ||
|  |   Created: 201, | ||
|  |   Accepted: 202, | ||
|  |   NonAuthoritativeInformation: 203, | ||
|  |   NoContent: 204, | ||
|  |   ResetContent: 205, | ||
|  |   PartialContent: 206, | ||
|  |   MultiStatus: 207, | ||
|  |   AlreadyReported: 208, | ||
|  |   ImUsed: 226, | ||
|  |   MultipleChoices: 300, | ||
|  |   MovedPermanently: 301, | ||
|  |   Found: 302, | ||
|  |   SeeOther: 303, | ||
|  |   NotModified: 304, | ||
|  |   UseProxy: 305, | ||
|  |   Unused: 306, | ||
|  |   TemporaryRedirect: 307, | ||
|  |   PermanentRedirect: 308, | ||
|  |   BadRequest: 400, | ||
|  |   Unauthorized: 401, | ||
|  |   PaymentRequired: 402, | ||
|  |   Forbidden: 403, | ||
|  |   NotFound: 404, | ||
|  |   MethodNotAllowed: 405, | ||
|  |   NotAcceptable: 406, | ||
|  |   ProxyAuthenticationRequired: 407, | ||
|  |   RequestTimeout: 408, | ||
|  |   Conflict: 409, | ||
|  |   Gone: 410, | ||
|  |   LengthRequired: 411, | ||
|  |   PreconditionFailed: 412, | ||
|  |   PayloadTooLarge: 413, | ||
|  |   UriTooLong: 414, | ||
|  |   UnsupportedMediaType: 415, | ||
|  |   RangeNotSatisfiable: 416, | ||
|  |   ExpectationFailed: 417, | ||
|  |   ImATeapot: 418, | ||
|  |   MisdirectedRequest: 421, | ||
|  |   UnprocessableEntity: 422, | ||
|  |   Locked: 423, | ||
|  |   FailedDependency: 424, | ||
|  |   TooEarly: 425, | ||
|  |   UpgradeRequired: 426, | ||
|  |   PreconditionRequired: 428, | ||
|  |   TooManyRequests: 429, | ||
|  |   RequestHeaderFieldsTooLarge: 431, | ||
|  |   UnavailableForLegalReasons: 451, | ||
|  |   InternalServerError: 500, | ||
|  |   NotImplemented: 501, | ||
|  |   BadGateway: 502, | ||
|  |   ServiceUnavailable: 503, | ||
|  |   GatewayTimeout: 504, | ||
|  |   HttpVersionNotSupported: 505, | ||
|  |   VariantAlsoNegotiates: 506, | ||
|  |   InsufficientStorage: 507, | ||
|  |   LoopDetected: 508, | ||
|  |   NotExtended: 510, | ||
|  |   NetworkAuthenticationRequired: 511, | ||
|  | }; | ||
|  | 
 | ||
|  | Object.entries(HttpStatusCode$1).forEach(([key, value]) => { | ||
|  |   HttpStatusCode$1[value] = key; | ||
|  | }); | ||
|  | 
 | ||
|  | const HttpStatusCode$2 = HttpStatusCode$1; | ||
|  | 
 | ||
|  | /** | ||
|  |  * Create an instance of Axios | ||
|  |  * | ||
|  |  * @param {Object} defaultConfig The default config for the instance | ||
|  |  * | ||
|  |  * @returns {Axios} A new instance of Axios | ||
|  |  */ | ||
|  | function createInstance(defaultConfig) { | ||
|  |   const context = new Axios$2(defaultConfig); | ||
|  |   const instance = bind(Axios$2.prototype.request, context); | ||
|  | 
 | ||
|  |   // Copy axios.prototype to instance
 | ||
|  |   utils$1.extend(instance, Axios$2.prototype, context, {allOwnKeys: true}); | ||
|  | 
 | ||
|  |   // Copy context to instance
 | ||
|  |   utils$1.extend(instance, context, null, {allOwnKeys: true}); | ||
|  | 
 | ||
|  |   // Factory for creating new instances
 | ||
|  |   instance.create = function create(instanceConfig) { | ||
|  |     return createInstance(mergeConfig$1(defaultConfig, instanceConfig)); | ||
|  |   }; | ||
|  | 
 | ||
|  |   return instance; | ||
|  | } | ||
|  | 
 | ||
|  | // Create the default instance to be exported
 | ||
|  | const axios = createInstance(defaults$1); | ||
|  | 
 | ||
|  | // Expose Axios class to allow class inheritance
 | ||
|  | axios.Axios = Axios$2; | ||
|  | 
 | ||
|  | // Expose Cancel & CancelToken
 | ||
|  | axios.CanceledError = CanceledError$1; | ||
|  | axios.CancelToken = CancelToken$2; | ||
|  | axios.isCancel = isCancel$1; | ||
|  | axios.VERSION = VERSION$1; | ||
|  | axios.toFormData = toFormData$1; | ||
|  | 
 | ||
|  | // Expose AxiosError class
 | ||
|  | axios.AxiosError = AxiosError$1; | ||
|  | 
 | ||
|  | // alias for CanceledError for backward compatibility
 | ||
|  | axios.Cancel = axios.CanceledError; | ||
|  | 
 | ||
|  | // Expose all/spread
 | ||
|  | axios.all = function all(promises) { | ||
|  |   return Promise.all(promises); | ||
|  | }; | ||
|  | 
 | ||
|  | axios.spread = spread$1; | ||
|  | 
 | ||
|  | // Expose isAxiosError
 | ||
|  | axios.isAxiosError = isAxiosError$1; | ||
|  | 
 | ||
|  | // Expose mergeConfig
 | ||
|  | axios.mergeConfig = mergeConfig$1; | ||
|  | 
 | ||
|  | axios.AxiosHeaders = AxiosHeaders$2; | ||
|  | 
 | ||
|  | axios.formToJSON = thing => formDataToJSON(utils$1.isHTMLForm(thing) ? new FormData(thing) : thing); | ||
|  | 
 | ||
|  | axios.getAdapter = adapters.getAdapter; | ||
|  | 
 | ||
|  | axios.HttpStatusCode = HttpStatusCode$2; | ||
|  | 
 | ||
|  | axios.default = axios; | ||
|  | 
 | ||
|  | // this module should only have a default export
 | ||
|  | const axios$1 = axios; | ||
|  | 
 | ||
|  | // This module is intended to unwrap Axios default export as named.
 | ||
|  | // Keep top-level export same with static properties
 | ||
|  | // so that it can keep same with es module or cjs
 | ||
|  | const { | ||
|  |   Axios, | ||
|  |   AxiosError, | ||
|  |   CanceledError, | ||
|  |   isCancel, | ||
|  |   CancelToken, | ||
|  |   VERSION, | ||
|  |   all, | ||
|  |   Cancel, | ||
|  |   isAxiosError, | ||
|  |   spread, | ||
|  |   toFormData, | ||
|  |   AxiosHeaders, | ||
|  |   HttpStatusCode, | ||
|  |   formToJSON, | ||
|  |   getAdapter, | ||
|  |   mergeConfig | ||
|  | } = axios$1; | ||
|  | 
 | ||
|  | export { Axios, AxiosError, AxiosHeaders, Cancel, CancelToken, CanceledError, HttpStatusCode, VERSION, all, axios$1 as default, formToJSON, getAdapter, isAxiosError, isCancel, mergeConfig, spread, toFormData }; | ||
|  | //# sourceMappingURL=axios.js.map
 |