@jeetiss/upload
Version:
Library for work with Uploadcare Upload API
79 lines (78 loc) • 3.13 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var multipartStart_1 = require("../api/multipartStart");
var multipartUpload_1 = require("../api/multipartUpload");
var multipartComplete_1 = require("../api/multipartComplete");
var defaultSettings_1 = require("../defaultSettings");
var getChunk = function (file, index, fileSize, chunkSize) {
var start = chunkSize * index;
var end = Math.min(start + chunkSize, fileSize);
return file.slice(start, end);
};
/**
* Upload multipart file.
*/
function multipart(file, _a) {
var publicKey = _a.publicKey, contentType = _a.contentType, _b = _a.multipartChunkSize, multipartChunkSize = _b === void 0 ? defaultSettings_1.default.multipartChunkSize : _b, fileName = _a.fileName, baseURL = _a.baseURL, secureSignature = _a.secureSignature, secureExpire = _a.secureExpire, store = _a.store, cancel = _a.cancel, onProgress = _a.onProgress, source = _a.source, integration = _a.integration, retryThrottledRequestMaxTimes = _a.retryThrottledRequestMaxTimes;
var fileSize = file.length || file.size;
var progressValues;
var createProgressHandler = function (size, index) {
if (!onProgress)
return;
if (!progressValues) {
progressValues = Array(size).fill(0);
}
var normalize = function (values) {
return values.reduce(function (sum, next) { return sum + next; }) / size;
};
return function (_a) {
var value = _a.value;
progressValues[index] = value;
onProgress({ value: normalize(progressValues) });
};
};
return multipartStart_1.default(fileSize, {
publicKey: publicKey,
contentType: contentType,
fileName: fileName,
baseURL: baseURL,
secureSignature: secureSignature,
secureExpire: secureExpire,
store: store,
cancel: cancel,
source: source,
integration: integration,
retryThrottledRequestMaxTimes: retryThrottledRequestMaxTimes
})
.then(function (_a) {
var uuid = _a.uuid, parts = _a.parts;
return Promise.all([
uuid,
Promise.all(parts.map(function (url, index) {
return multipartUpload_1.default(getChunk(file, index, fileSize, multipartChunkSize), url, {
publicKey: publicKey,
onProgress: createProgressHandler(parts.length, index),
cancel: cancel,
integration: integration
});
}))
]);
})
.then(function (_a) {
var uuid = _a[0];
return multipartComplete_1.default(uuid, {
publicKey: publicKey,
baseURL: baseURL,
source: source,
integration: integration,
retryThrottledRequestMaxTimes: retryThrottledRequestMaxTimes
});
})
.then(function (result) {
// hack for node ¯\_(ツ)_/¯
if (onProgress)
onProgress({ value: 1 });
return result;
});
}
exports.default = multipart;