@rpldy/chunked-sender
Version:
adds chunked upload capabilities on top of the regular XHR uploads
55 lines (54 loc) • 1.96 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _shared = require("@rpldy/shared");
var _simpleState = require("@rpldy/simple-state");
var _consts = require("../consts");
const handleChunkRequest = (chunkedState, item, chunkId, chunkSendResult, trigger, onProgress) => {
chunkedState.updateState(state => {
state.requests[chunkId] = {
id: chunkId,
abort: chunkSendResult.abort
};
});
return chunkSendResult.request.then(result => {
_shared.logger.debugLog(`chunkedSender: request finished for chunk: ${chunkId} - `, result);
chunkedState.updateState(state => {
delete state.requests[chunkId];
});
const chunks = chunkedState.getState().chunks;
const index = chunks.findIndex(c => c.id === chunkId);
if (~index) {
if (result.state === _shared.FILE_STATES.FINISHED) {
const finishedChunk = chunks[index];
chunkedState.updateState(state => {
state.chunks = state.chunks.slice(0, index).concat(state.chunks.slice(index + 1));
});
const chunkSize = finishedChunk.end - finishedChunk.start;
onProgress({
loaded: chunkSize,
total: item.file.size
}, [finishedChunk]);
trigger(_consts.CHUNK_EVENTS.CHUNK_FINISH, {
chunk: (0, _shared.pick)(finishedChunk, ["id", "start", "end", "index", "attempt"]),
item: (0, _simpleState.unwrap)(item),
uploadData: result
});
} else if (result.state !== _shared.FILE_STATES.ABORTED) {
chunkedState.updateState(state => {
state.chunks[index].attempt += 1;
state.lastChunkErrorData = {
status: result.status,
response: result.response
};
});
}
chunkedState.updateState(state => {
state.responses.push(result.response);
});
}
});
};
var _default = exports.default = handleChunkRequest;