CoolFace
Apppublic

opusdev/vector-similarity-api

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes
xhr.js201 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 && function (config) {15  return new Promise(function dispatchXhrRequest(resolve, reject) {16    const _config = resolveConfig(config);17    let requestData = _config.data;18    const requestHeaders = AxiosHeaders.from(_config.headers).normalize();19    let {responseType, onUploadProgress, onDownloadProgress} = _config;20    let onCanceled;21    let uploadThrottled, downloadThrottled;22    let flushUpload, flushDownload;23 24    function done() {25      flushUpload && flushUpload(); // flush events26      flushDownload && flushDownload(); // flush events27 28      _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled);29 30      _config.signal && _config.signal.removeEventListener('abort', onCanceled);31    }32 33    let request = new XMLHttpRequest();34 35    request.open(_config.method.toUpperCase(), _config.url, true);36 37    // Set the request timeout in MS38    request.timeout = _config.timeout;39 40    function onloadend() {41      if (!request) {42        return;43      }44      // Prepare the response45      const responseHeaders = AxiosHeaders.from(46        'getAllResponseHeaders' in request && request.getAllResponseHeaders()47      );48      const responseData = !responseType || responseType === 'text' || responseType === 'json' ?49        request.responseText : request.response;50      const response = {51        data: responseData,52        status: request.status,53        statusText: request.statusText,54        headers: responseHeaders,55        config,56        request57      };58 59      settle(function _resolve(value) {60        resolve(value);61        done();62      }, function _reject(err) {63        reject(err);64        done();65      }, response);66 67      // Clean up request68      request = null;69    }70 71    if ('onloadend' in request) {72      // Use onloadend if available73      request.onloadend = onloadend;74    } else {75      // Listen for ready state to emulate onloadend76      request.onreadystatechange = function handleLoad() {77        if (!request || request.readyState !== 4) {78          return;79        }80 81        // The request errored out and we didn't get a response, this will be82        // handled by onerror instead83        // With one exception: request that using file: protocol, most browsers84        // will return status as 0 even though it's a successful request85        if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {86          return;87        }88        // readystate handler is calling before onerror or ontimeout handlers,89        // so we should call onloadend on the next 'tick'90        setTimeout(onloadend);91      };92    }93 94    // Handle browser request cancellation (as opposed to a manual cancellation)95    request.onabort = function handleAbort() {96      if (!request) {97        return;98      }99 100      reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));101 102      // Clean up request103      request = null;104    };105 106    // Handle low level network errors107  request.onerror = function handleError(event) {108       // Browsers deliver a ProgressEvent in XHR onerror109       // (message may be empty; when present, surface it)110       // See https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/error_event111       const msg = event && event.message ? event.message : 'Network Error';112       const err = new AxiosError(msg, AxiosError.ERR_NETWORK, config, request);113       // attach the underlying event for consumers who want details114       err.event = event || null;115       reject(err);116       request = null;117    };118    119    // Handle timeout120    request.ontimeout = function handleTimeout() {121      let timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded';122      const transitional = _config.transitional || transitionalDefaults;123      if (_config.timeoutErrorMessage) {124        timeoutErrorMessage = _config.timeoutErrorMessage;125      }126      reject(new AxiosError(127        timeoutErrorMessage,128        transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,129        config,130        request));131 132      // Clean up request133      request = null;134    };135 136    // Remove Content-Type if data is undefined137    requestData === undefined && requestHeaders.setContentType(null);138 139    // Add headers to the request140    if ('setRequestHeader' in request) {141      utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {142        request.setRequestHeader(key, val);143      });144    }145 146    // Add withCredentials to request if needed147    if (!utils.isUndefined(_config.withCredentials)) {148      request.withCredentials = !!_config.withCredentials;149    }150 151    // Add responseType to request if needed152    if (responseType && responseType !== 'json') {153      request.responseType = _config.responseType;154    }155 156    // Handle progress if needed157    if (onDownloadProgress) {158      ([downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true));159      request.addEventListener('progress', downloadThrottled);160    }161 162    // Not all browsers support upload events163    if (onUploadProgress && request.upload) {164      ([uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress));165 166      request.upload.addEventListener('progress', uploadThrottled);167 168      request.upload.addEventListener('loadend', flushUpload);169    }170 171    if (_config.cancelToken || _config.signal) {172      // Handle cancellation173      // eslint-disable-next-line func-names174      onCanceled = cancel => {175        if (!request) {176          return;177        }178        reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);179        request.abort();180        request = null;181      };182 183      _config.cancelToken && _config.cancelToken.subscribe(onCanceled);184      if (_config.signal) {185        _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled);186      }187    }188 189    const protocol = parseProtocol(_config.url);190 191    if (protocol && platform.protocols.indexOf(protocol) === -1) {192      reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));193      return;194    }195 196 197    // Send the request198    request.send(requestData || null);199  });200}201