@rpldy/chunked-sender
Version:
adds chunked upload capabilities on top of the regular XHR uploads
57 lines (56 loc) • 2.35 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.startProcessing = exports.default = exports.abortChunkedRequest = void 0;
var _shared = require("@rpldy/shared");
var _getChunks = _interopRequireDefault(require("./getChunks"));
var _sendChunks = _interopRequireDefault(require("./sendChunks"));
var _consts = require("../consts");
var _processChunkProgressData = _interopRequireDefault(require("./processChunkProgressData"));
var _getChunkedState = _interopRequireDefault(require("./getChunkedState"));
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
const abortChunkedRequest = (chunkedState, item) => {
_shared.logger.debugLog(`chunkedSender: aborting chunked upload for item: ${item.id}`);
const state = chunkedState.getState();
if (!state.finished && !state.aborted) {
Object.keys(state.requests).forEach(chunkId => {
_shared.logger.debugLog(`chunkedSender: aborting chunk: ${chunkId}`);
state.requests[chunkId].abort();
});
chunkedState.updateState(state => {
state.aborted = true;
});
}
return state.aborted;
};
exports.abortChunkedRequest = abortChunkedRequest;
const startProcessing = (chunkedState, item, onProgress, trigger) => {
const onChunkProgress = (e, chunks) => {
const progressData = (0, _processChunkProgressData.default)(chunkedState, item, chunks[0].id, e.loaded);
onProgress(progressData, [item]);
};
const sendPromise = new Promise(resolve => {
(0, _sendChunks.default)(chunkedState, item, onChunkProgress, resolve, trigger);
});
return {
sendPromise,
abort: () => abortChunkedRequest(chunkedState, item)
};
};
exports.startProcessing = startProcessing;
const processChunks = (item, chunkedOptions, url, sendOptions, onProgress, trigger) => {
const chunks = (0, _getChunks.default)(item, chunkedOptions, sendOptions.startByte);
const chunkedState = (0, _getChunkedState.default)(chunks, url, sendOptions, chunkedOptions);
_shared.logger.debugLog(`chunkedSender: created ${chunks.length} chunks for: ${item.file.name}.`);
const {
sendPromise,
abort
} = startProcessing(chunkedState, item, onProgress, trigger);
return {
request: sendPromise,
abort,
senderType: _consts.CHUNKED_SENDER_TYPE
};
};
var _default = exports.default = processChunks;