UNPKG

@lifaon/rx-js-light

Version:

Blazing fast Observables

128 lines (127 loc) 6.76 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.fromXHR = void 0; var is_abort_error_1 = require("../../../../../../../misc/errors/abort-error/is-abort-error.cjs"); var create_network_error_1 = require("../../../../../../../misc/errors/network-error/create-network-error.cjs"); var create_event_listener_1 = require("../../../../../../../misc/event-listener/functions/create-event-listener.cjs"); var to_typed_event_target_1 = require("../../../../../../../misc/event-listener/functions/to-typed-event-target.cjs"); var noop_1 = require("../../../../../../../misc/helpers/noop.cjs"); var complete_notification_constant_1 = require("../../../../../../../misc/notifications/built-in/complete/complete-notification.constant.cjs"); var create_download_progress_notification_1 = require("../../../../../../../misc/notifications/built-in/download-progress/create-download-progress-notification.cjs"); var create_error_notification_1 = require("../../../../../../../misc/notifications/built-in/error/create-error-notification.cjs"); var create_abort_error_notification_1 = require("../../../../../../../misc/notifications/built-in/error/derived/create-abort-error-notification.cjs"); var create_next_notification_1 = require("../../../../../../../misc/notifications/built-in/next/create-next-notification.cjs"); var upload_complete_notification_constant_1 = require("../../../../../../../misc/notifications/built-in/upload-complete/upload-complete-notification.constant.cjs"); var create_upload_progress_notification_1 = require("../../../../../../../misc/notifications/built-in/upload-progress/create-upload-progress-notification.cjs"); var create_progress_from_progress_event_1 = require("../../../../../../../misc/progress/create-progress-from-progress-event.cjs"); var xhr_helpers_1 = require("../xhr-helpers.cjs"); function fromXHR(requestInfo, requestInit, options) { var request = new Request(requestInfo, requestInit); var useReadableStream = (0, xhr_helpers_1.areReadableStreamSupported)() && (options === void 0 || options.useReadableStream === void 0 ? true : options.useReadableStream); return function (emit) { if (request.signal.aborted) { emit((0, create_abort_error_notification_1.createAbortErrorNotification)({ signal: request.signal })); return noop_1.noop; } else { var running_1 = true; var xhr_1 = new XMLHttpRequest(); var stream_1; var responseType_1; if (useReadableStream) { responseType_1 = 'binary-string'; stream_1 = (0, xhr_helpers_1.XHRResponseToReadableStream)(xhr_1, responseType_1); } else { responseType_1 = 'blob'; } var end_1 = function () { running_1 = false; removeReadyStateChangeEventListener_1(); removeLoadEventListener_1(); removeErrorEventListener_1(); removeAbortEventListener_1(); removeDownloadProgressEventListener_1(); removeUploadProgressEventListener_1(); removeUploadCompleteEventListener_1(); }; var next_1 = function (response) { emit((0, create_next_notification_1.createNextNotification)(response)); }; var complete = function () { if (running_1) { end_1(); emit(complete_notification_constant_1.STATIC_COMPLETE_NOTIFICATION); } }; var error_1 = function (error) { if (running_1) { end_1(); emit((0, create_error_notification_1.createErrorNotification)(error)); } }; var abort = function () { if (running_1) { end_1(); emit((0, create_abort_error_notification_1.createAbortErrorNotification)({ signal: request.signal })); } }; var downloadProgress_1 = function (progress) { if (running_1) { emit((0, create_download_progress_notification_1.createDownloadProgressNotification)(progress)); } }; var uploadProgress_1 = function (progress) { if (running_1) { emit((0, create_upload_progress_notification_1.createUploadProgressNotification)(progress)); } }; var uploadComplete = function () { if (running_1) { emit(upload_complete_notification_constant_1.STATIC_UPLOAD_COMPLETE_NOTIFICATION); } }; var removeReadyStateChangeEventListener_1 = (0, create_event_listener_1.createEventListener)((0, to_typed_event_target_1.toTypedEventTarget)(xhr_1), 'readystatechange', function () { if (running_1) { if (stream_1 === void 0) { if (xhr_1.readyState === xhr_1.DONE) { next_1((0, xhr_helpers_1.XHRResponseToResponse)(xhr_1, responseType_1)); } } else { if (xhr_1.readyState === xhr_1.HEADERS_RECEIVED) { next_1(new xhr_helpers_1.XHRResponse(stream_1, (0, xhr_helpers_1.XHRResponseToResponseInit)(xhr_1))); } } } }); var removeLoadEventListener_1 = (0, create_event_listener_1.createEventListener)((0, to_typed_event_target_1.toTypedEventTarget)(xhr_1), 'load', complete); var removeErrorEventListener_1 = (0, create_event_listener_1.createEventListener)((0, to_typed_event_target_1.toTypedEventTarget)(xhr_1), 'error', function () { error_1((0, create_network_error_1.createNetworkErrorFromRequest)(request)); }); var removeAbortEventListener_1 = (0, create_event_listener_1.createEventListener)((0, to_typed_event_target_1.toTypedEventTarget)(xhr_1), 'abort', abort); var removeDownloadProgressEventListener_1 = (0, create_event_listener_1.createEventListener)((0, to_typed_event_target_1.toTypedEventTarget)(xhr_1), 'progress', function (event) { downloadProgress_1((0, create_progress_from_progress_event_1.createProgressFromProgressEvent)(event)); }); var removeUploadProgressEventListener_1 = (0, create_event_listener_1.createEventListener)((0, to_typed_event_target_1.toTypedEventTarget)(xhr_1.upload), 'progress', function (event) { uploadProgress_1((0, create_progress_from_progress_event_1.createProgressFromProgressEvent)(event)); }); var removeUploadCompleteEventListener_1 = (0, create_event_listener_1.createEventListener)((0, to_typed_event_target_1.toTypedEventTarget)(xhr_1.upload), 'load', uploadComplete); (0, xhr_helpers_1.initAndSendXHRFromRequest)(xhr_1, responseType_1, request).catch(function (error) { if (!(0, is_abort_error_1.isAbortError)(error)) { throw error; } }); return function () { if (running_1) { end_1(); xhr_1.abort(); } }; } }; } exports.fromXHR = fromXHR;