import { AjaxRequest } from './types'; 
 | 
import { getXHRResponse } from './getXHRResponse'; 
 | 
import { createErrorClass } from '../util/createErrorClass'; 
 | 
  
 | 
/** 
 | 
 * A normalized AJAX error. 
 | 
 * 
 | 
 * @see {@link ajax} 
 | 
 * 
 | 
 * @class AjaxError 
 | 
 */ 
 | 
export interface AjaxError extends Error { 
 | 
  /** 
 | 
   * The XHR instance associated with the error. 
 | 
   */ 
 | 
  xhr: XMLHttpRequest; 
 | 
  
 | 
  /** 
 | 
   * The AjaxRequest associated with the error. 
 | 
   */ 
 | 
  request: AjaxRequest; 
 | 
  
 | 
  /** 
 | 
   * The HTTP status code, if the request has completed. If not, 
 | 
   * it is set to `0`. 
 | 
   */ 
 | 
  status: number; 
 | 
  
 | 
  /** 
 | 
   * The responseType (e.g. 'json', 'arraybuffer', or 'xml'). 
 | 
   */ 
 | 
  responseType: XMLHttpRequestResponseType; 
 | 
  
 | 
  /** 
 | 
   * The response data. 
 | 
   */ 
 | 
  response: any; 
 | 
} 
 | 
  
 | 
export interface AjaxErrorCtor { 
 | 
  /** 
 | 
   * @deprecated Internal implementation detail. Do not construct error instances. 
 | 
   * Cannot be tagged as internal: https://github.com/ReactiveX/rxjs/issues/6269 
 | 
   */ 
 | 
  new (message: string, xhr: XMLHttpRequest, request: AjaxRequest): AjaxError; 
 | 
} 
 | 
  
 | 
/** 
 | 
 * Thrown when an error occurs during an AJAX request. 
 | 
 * This is only exported because it is useful for checking to see if an error 
 | 
 * is an `instanceof AjaxError`. DO NOT create new instances of `AjaxError` with 
 | 
 * the constructor. 
 | 
 * 
 | 
 * @class AjaxError 
 | 
 * @see {@link ajax} 
 | 
 */ 
 | 
export const AjaxError: AjaxErrorCtor = createErrorClass( 
 | 
  (_super) => 
 | 
    function AjaxErrorImpl(this: any, message: string, xhr: XMLHttpRequest, request: AjaxRequest) { 
 | 
      this.message = message; 
 | 
      this.name = 'AjaxError'; 
 | 
      this.xhr = xhr; 
 | 
      this.request = request; 
 | 
      this.status = xhr.status; 
 | 
      this.responseType = xhr.responseType; 
 | 
      let response: any; 
 | 
      try { 
 | 
        // This can throw in IE, because we have to do a JSON.parse of 
 | 
        // the response in some cases to get the expected response property. 
 | 
        response = getXHRResponse(xhr); 
 | 
      } catch (err) { 
 | 
        response = xhr.responseText; 
 | 
      } 
 | 
      this.response = response; 
 | 
    } 
 | 
); 
 | 
  
 | 
export interface AjaxTimeoutError extends AjaxError {} 
 | 
  
 | 
export interface AjaxTimeoutErrorCtor { 
 | 
  /** 
 | 
   * @deprecated Internal implementation detail. Do not construct error instances. 
 | 
   * Cannot be tagged as internal: https://github.com/ReactiveX/rxjs/issues/6269 
 | 
   */ 
 | 
  new (xhr: XMLHttpRequest, request: AjaxRequest): AjaxTimeoutError; 
 | 
} 
 | 
  
 | 
/** 
 | 
 * Thrown when an AJAX request times out. Not to be confused with {@link TimeoutError}. 
 | 
 * 
 | 
 * This is exported only because it is useful for checking to see if errors are an 
 | 
 * `instanceof AjaxTimeoutError`. DO NOT use the constructor to create an instance of 
 | 
 * this type. 
 | 
 * 
 | 
 * @class AjaxTimeoutError 
 | 
 * @see {@link ajax} 
 | 
 */ 
 | 
export const AjaxTimeoutError: AjaxTimeoutErrorCtor = (() => { 
 | 
  function AjaxTimeoutErrorImpl(this: any, xhr: XMLHttpRequest, request: AjaxRequest) { 
 | 
    AjaxError.call(this, 'ajax timeout', xhr, request); 
 | 
    this.name = 'AjaxTimeoutError'; 
 | 
    return this; 
 | 
  } 
 | 
  AjaxTimeoutErrorImpl.prototype = Object.create(AjaxError.prototype); 
 | 
  return AjaxTimeoutErrorImpl; 
 | 
})() as any; 
 |