Spaces:
Runtime error
Runtime error
| ; | |
| import bind from './helpers/bind.js'; | |
| // utils is a library of generic helper functions non-specific to axios | |
| const {toString} = Object.prototype; | |
| const {getPrototypeOf} = Object; | |
| 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) && !(Symbol.toStringTag in val) && !(Symbol.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'); | |
| /** | |
| * 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[Symbol.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) => { | |
| value = +value; | |
| return Number.isFinite(value) ? value : defaultValue; | |
| } | |
| const ALPHA = 'abcdefghijklmnopqrstuvwxyz' | |
| const DIGIT = '0123456789'; | |
| const ALPHABET = { | |
| DIGIT, | |
| ALPHA, | |
| ALPHA_DIGIT: ALPHA + ALPHA.toUpperCase() + DIGIT | |
| } | |
| const generateString = (size = 16, alphabet = ALPHABET.ALPHA_DIGIT) => { | |
| let str = ''; | |
| const {length} = alphabet; | |
| while (size--) { | |
| str += alphabet[Math.random() * length|0] | |
| } | |
| return str; | |
| } | |
| /** | |
| * 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[Symbol.toStringTag] === 'FormData' && thing[Symbol.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); | |
| export default { | |
| isArray, | |
| isArrayBuffer, | |
| isBuffer, | |
| isFormData, | |
| isArrayBufferView, | |
| isString, | |
| isNumber, | |
| isBoolean, | |
| isObject, | |
| isPlainObject, | |
| 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, | |
| ALPHABET, | |
| generateString, | |
| isSpecCompliantForm, | |
| toJSONObject, | |
| isAsyncFn, | |
| isThenable | |
| }; | |