UNPKG

@jeetiss/upload

Version:
79 lines (78 loc) 3.13 kB
"use strict"; 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;