diff options
Diffstat (limited to 'node_modules/rxjs/src/internal/ajax/errors.ts')
| -rw-r--r-- | node_modules/rxjs/src/internal/ajax/errors.ts | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/node_modules/rxjs/src/internal/ajax/errors.ts b/node_modules/rxjs/src/internal/ajax/errors.ts new file mode 100644 index 0000000..36b6dc7 --- /dev/null +++ b/node_modules/rxjs/src/internal/ajax/errors.ts @@ -0,0 +1,102 @@ +import { AjaxRequest } from './types'; +import { getXHRResponse } from './getXHRResponse'; +import { createErrorClass } from '../util/createErrorClass'; + +/** + * A normalized AJAX error. + * + * @see {@link ajax} + */ +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. + * + * @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. + * + * @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; |
