CoolFace
Datasetpublic

basant307/AI_Governance_Project

sourceHugging Faceapache-2.0updated 2mo agoView on Hugging Face
0likes48downloads
xhr.js223 linesDownload Raw Back to adapters
1import utils from '../utils.js';2import settle from '../core/settle.js';3import transitionalDefaults from '../defaults/transitional.js';4import AxiosError from '../core/AxiosError.js';5import CanceledError from '../cancel/CanceledError.js';6import parseProtocol from '../helpers/parseProtocol.js';7import platform from '../platform/index.js';8import AxiosHeaders from '../core/AxiosHeaders.js';9import { progressEventReducer } from '../helpers/progressEventReducer.js';10import resolveConfig from '../helpers/resolveConfig.js';11 12const isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';13 14export default isXHRAdapterSupported &&15  function (config) {16    return new Promise(function dispatchXhrRequest(resolve, reject) {17      const _config = resolveConfig(config);18      let requestData = _config.data;19      const requestHeaders = AxiosHeaders.from(_config.headers).normalize();20      let { responseType, onUploadProgress, onDownloadProgress } = _config;21      let onCanceled;22      let uploadThrottled, downloadThrottled;23      let flushUpload, flushDownload;24 25      function done() {26        flushUpload && flushUpload(); // flush events27        flushDownload && flushDownload(); // flush events28 29        _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled);30 31        _config.signal && _config.signal.removeEventListener('abort', onCanceled);32      }33 34      let request = new XMLHttpRequest();35 36      request.open(_config.method.toUpperCase(), _config.url, true);37 38      // Set the request timeout in MS39      request.timeout = _config.timeout;40 41      function onloadend() {42        if (!request) {43          return;44        }45        // Prepare the response46        const responseHeaders = AxiosHeaders.from(47          'getAllResponseHeaders' in request && request.getAllResponseHeaders()48        );49        const responseData =50          !responseType || responseType === 'text' || responseType === 'json'51            ? request.responseText52            : request.response;53        const response = {54          data: responseData,55          status: request.status,56          statusText: request.statusText,57          headers: responseHeaders,58          config,59          request,60        };61 62        settle(63          function _resolve(value) {64            resolve(value);65            done();66          },67          function _reject(err) {68            reject(err);69            done();70          },71          response72        );73 74        // Clean up request75        request = null;76      }77 78      if ('onloadend' in request) {79        // Use onloadend if available80        request.onloadend = onloadend;81      } else {82        // Listen for ready state to emulate onloadend83        request.onreadystatechange = function handleLoad() {84          if (!request || request.readyState !== 4) {85            return;86          }87 88          // The request errored out and we didn't get a response, this will be89          // handled by onerror instead90          // With one exception: request that using file: protocol, most browsers91          // will return status as 0 even though it's a successful request92          if (93            request.status === 0 &&94            !(request.responseURL && request.responseURL.indexOf('file:') === 0)95          ) {96            return;97          }98          // readystate handler is calling before onerror or ontimeout handlers,99          // so we should call onloadend on the next 'tick'100          setTimeout(onloadend);101        };102      }103 104      // Handle browser request cancellation (as opposed to a manual cancellation)105      request.onabort = function handleAbort() {106        if (!request) {107          return;108        }109 110        reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));111 112        // Clean up request113        request = null;114      };115 116      // Handle low level network errors117      request.onerror = function handleError(event) {118        // Browsers deliver a ProgressEvent in XHR onerror119        // (message may be empty; when present, surface it)120        // See https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/error_event121        const msg = event && event.message ? event.message : 'Network Error';122        const err = new AxiosError(msg, AxiosError.ERR_NETWORK, config, request);123        // attach the underlying event for consumers who want details124        err.event = event || null;125        reject(err);126        request = null;127      };128 129      // Handle timeout130      request.ontimeout = function handleTimeout() {131        let timeoutErrorMessage = _config.timeout132          ? 'timeout of ' + _config.timeout + 'ms exceeded'133          : 'timeout exceeded';134        const transitional = _config.transitional || transitionalDefaults;135        if (_config.timeoutErrorMessage) {136          timeoutErrorMessage = _config.timeoutErrorMessage;137        }138        reject(139          new AxiosError(140            timeoutErrorMessage,141            transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,142            config,143            request144          )145        );146 147        // Clean up request148        request = null;149      };150 151      // Remove Content-Type if data is undefined152      requestData === undefined && requestHeaders.setContentType(null);153 154      // Add headers to the request155      if ('setRequestHeader' in request) {156        utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {157          request.setRequestHeader(key, val);158        });159      }160 161      // Add withCredentials to request if needed162      if (!utils.isUndefined(_config.withCredentials)) {163        request.withCredentials = !!_config.withCredentials;164      }165 166      // Add responseType to request if needed167      if (responseType && responseType !== 'json') {168        request.responseType = _config.responseType;169      }170 171      // Handle progress if needed172      if (onDownloadProgress) {173        [downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true);174        request.addEventListener('progress', downloadThrottled);175      }176 177      // Not all browsers support upload events178      if (onUploadProgress && request.upload) {179        [uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress);180 181        request.upload.addEventListener('progress', uploadThrottled);182 183        request.upload.addEventListener('loadend', flushUpload);184      }185 186      if (_config.cancelToken || _config.signal) {187        // Handle cancellation188        // eslint-disable-next-line func-names189        onCanceled = (cancel) => {190          if (!request) {191            return;192          }193          reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);194          request.abort();195          request = null;196        };197 198        _config.cancelToken && _config.cancelToken.subscribe(onCanceled);199        if (_config.signal) {200          _config.signal.aborted201            ? onCanceled()202            : _config.signal.addEventListener('abort', onCanceled);203        }204      }205 206      const protocol = parseProtocol(_config.url);207 208      if (protocol && platform.protocols.indexOf(protocol) === -1) {209        reject(210          new AxiosError(211            'Unsupported protocol ' + protocol + ':',212            AxiosError.ERR_BAD_REQUEST,213            config214          )215        );216        return;217      }218 219      // Send the request220      request.send(requestData || null);221    });222  };223 
basant307/AI_Governance_Project · CoolFace