UNPKG

@rpldy/chunked-sender

Version:

adds chunked upload capabilities on top of the regular XHR uploads

55 lines (54 loc) 1.96 kB
"use strict"; 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;