UNPKG

js-uploader

Version:
64 lines 2.85 kB
import { __awaiter, __generator } from "tslib"; import { Logger } from '../shared/Logger'; import { scheduleWork } from './schedule-work'; export var computeMd5 = function (file) { return new Promise(function (resolve) { var spark = new SparkMD5.ArrayBuffer(); var currentChunk = 0; var chunkSize = Math.pow(1024, 2) * 4; var fileSize = file instanceof ArrayBuffer ? file.byteLength : file.size; var chunks = Math.ceil(fileSize / chunkSize); var append = function (data, start, end) { return new Promise(function (resolve, reject) { Logger.info('read chunk nr', currentChunk + 1, 'of', chunks); if (data instanceof ArrayBuffer) { spark.append(data.slice(start, end)); resolve(); } else { var fileReader = new FileReader(); fileReader.onload = function (e) { var _a; spark.append((_a = e.target) === null || _a === void 0 ? void 0 : _a.result); resolve(); }; fileReader.onerror = function (e) { Logger.warn('oops, something went wrong.', e); reject(e); }; } }); }; var loadNext = function (timeRemaining) { return __awaiter(void 0, void 0, void 0, function () { var start, end, md5; return __generator(this, function (_a) { switch (_a.label) { case 0: if (!(currentChunk < chunks)) return [3 /*break*/, 2]; start = currentChunk * chunkSize; end = start + chunkSize >= fileSize ? fileSize : start + chunkSize; return [4 /*yield*/, append(file, start, end)]; case 1: _a.sent(); currentChunk++; if (!timeRemaining || !(timeRemaining === null || timeRemaining === void 0 ? void 0 : timeRemaining())) { return [3 /*break*/, 2]; } return [3 /*break*/, 0]; case 2: if (currentChunk < chunks) { scheduleWork(loadNext); } else { md5 = spark.end(); Logger.info('computed hash', md5); resolve(md5); } return [2 /*return*/]; } }); }); }; return loadNext(); }); }; //# sourceMappingURL=compute-md5.js.map