@lifaon/rx-js-light
Version:
Blazing fast Observables
86 lines (85 loc) • 3.63 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.readBlob = void 0;
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 complete_notification_constant_1 = require("../../../../../../misc/notifications/built-in/complete/complete-notification.constant.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 progress_notification_1 = require("../../../../../../misc/notifications/built-in/progress-notification.cjs");
var create_progress_from_progress_event_1 = require("../../../../../../misc/progress/create-progress-from-progress-event.cjs");
function readBlob(blob, readType) {
return function (emit) {
var fileReader = new FileReader();
var running = true;
var end = function () {
running = false;
removeLoadEventListener();
removeErrorEventListener();
removeAbortEventListener();
removeProgressEventListener();
};
var next = function (value) {
if (running) {
emit((0, create_next_notification_1.createNextNotification)(value));
}
};
var complete = function () {
if (running) {
end();
emit(complete_notification_constant_1.STATIC_COMPLETE_NOTIFICATION);
}
};
var error = function (error) {
if (running) {
end();
emit((0, create_error_notification_1.createErrorNotification)(error));
}
};
var abort = function () {
if (running) {
end();
emit((0, create_abort_error_notification_1.createAbortErrorNotification)());
}
};
var progress = function (progress) {
if (running) {
emit((0, progress_notification_1.createProgressNotification)(progress));
}
};
var removeLoadEventListener = (0, create_event_listener_1.createEventListener)((0, to_typed_event_target_1.toTypedEventTarget)(fileReader), 'load', function () {
next(fileReader.result);
complete();
});
var removeErrorEventListener = (0, create_event_listener_1.createEventListener)((0, to_typed_event_target_1.toTypedEventTarget)(fileReader), 'error', function () {
error(fileReader.error);
});
var removeAbortEventListener = (0, create_event_listener_1.createEventListener)((0, to_typed_event_target_1.toTypedEventTarget)(fileReader), 'abort', abort);
var removeProgressEventListener = (0, create_event_listener_1.createEventListener)((0, to_typed_event_target_1.toTypedEventTarget)(fileReader), 'progress', function (event) {
progress((0, create_progress_from_progress_event_1.createProgressFromProgressEvent)(event));
});
switch (readType) {
case 'data-url':
fileReader.readAsDataURL(blob);
break;
case 'text':
fileReader.readAsText(blob);
break;
case 'array-buffer':
fileReader.readAsArrayBuffer(blob);
break;
default:
throw new TypeError("Expected 'data-url', 'text', or 'array-buffer' as type");
}
return function () {
if (running) {
end();
fileReader.abort();
}
};
};
}
exports.readBlob = readBlob;