1 line
27 KiB
JSON
1 line
27 KiB
JSON
|
|
{"ast":null,"code":"import platform from '../platform/index.js';\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport composeSignals from '../helpers/composeSignals.js';\nimport { trackStream } from '../helpers/trackStream.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport { progressEventReducer, progressEventDecorator, asyncDecorator } from '../helpers/progressEventReducer.js';\nimport resolveConfig from '../helpers/resolveConfig.js';\nimport settle from '../core/settle.js';\nconst DEFAULT_CHUNK_SIZE = 64 * 1024;\nconst {\n isFunction\n} = utils;\nconst globalFetchAPI = (({\n Request,\n Response\n}) => ({\n Request,\n Response\n}))(utils.global);\nconst {\n ReadableStream,\n TextEncoder\n} = utils.global;\nconst test = (fn, ...args) => {\n try {\n return !!fn(...args);\n } catch (e) {\n return false;\n }\n};\nconst factory = env => {\n env = utils.merge.call({\n skipUndefined: true\n }, globalFetchAPI, env);\n const {\n fetch: envFetch,\n Request,\n Response\n } = env;\n const isFetchSupported = envFetch ? isFunction(envFetch) : typeof fetch === 'function';\n const isRequestSupported = isFunction(Request);\n const isResponseSupported = isFunction(Response);\n if (!isFetchSupported) {\n return false;\n }\n const isReadableStreamSupported = isFetchSupported && isFunction(ReadableStream);\n const encodeText = isFetchSupported && (typeof TextEncoder === 'function' ? (encoder => str => encoder.encode(str))(new TextEncoder()) : async str => new Uint8Array(await new Request(str).arrayBuffer()));\n const supportsRequestStream = isRequestSupported && isReadableStreamSupported && test(() => {\n let duplexAccessed = false;\n const body = new ReadableStream();\n const hasContentType = new Request(platform.origin, {\n body,\n method: 'POST',\n get duplex() {\n duplexAccessed = true;\n return 'half';\n }\n }).headers.has('Content-Type');\n body.cancel();\n return duplexAccessed && !hasContentType;\n });\n const supportsResponseStream = isResponseSupported && isReadableStreamSupported && test(() => utils.isReadableStream(new Response('').body));\n const resolvers = {\n stream: supportsResponseStream && (res => res.body)\n };\n isFetchSupported && (() => {\n ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => {\n !resolvers[type] && (resolvers[type] = (res, config) => {\n let method = res && res[type];\n if (method) {\n return method.call(res);\n }\n throw new AxiosError(`Response type '${type}' is not supported`, AxiosError.ERR_NOT_SUPPORT, config);\n });\n });\n })();\n const getBodyLength = async body => {\n if (body == null) {\n return 0;\n }\n if (utils.isBlob(body)) {\n return body.size;\n }\n if (utils.isSpecCompliantForm(body)) {\n const _request = new Request(platform.origin, {\n method: 'POST',\n body\n });\n return (await _request.arrayBuffer()).byteLength;\n }\n if (utils.isArrayBufferView(body) || utils.isArrayBuffer(body)) {\n return body.byteLength;\n }\n if (utils.isURLSearchParams(body)) {\n body = body + '';\n }\n if (utils.isString(body)) {\n return (await encodeText(body)).byteLength;\n }\n };\n const resolveBodyLength = async (headers, body) => {\n const length = utils.toFiniteNumber(headers.getContentLength());\n return length == null ? getBodyLength(body) : length;\n };\n return async config => {\n let {\n url,\n method,\n data,\n signal,\n cancelToken,\n timeout,\n onDownloadProgress,\n onUploadProgress,\n responseType,\n headers,\n withCredentials = 'same-origin',\n fetchOptions\n } = resolveConfig(config);\n let _fetch = envFetch || fetch;\n responseType = responseType ? (responseType + '').toLowerCase() : 'text';\n let composedSignal = composeSignals([signal, cancelToken && cancelToken.toAbortSignal()], timeout)
|