UNPKG

js-uploader

Version:
67 lines 3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.computeMd5 = void 0; var tslib_1 = require("tslib"); var Logger_1 = require("../shared/Logger"); var schedule_work_1 = require("./schedule-work"); exports.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_1.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_1.Logger.warn('oops, something went wrong.', e); reject(e); }; } }); }; var loadNext = function (timeRemaining) { return tslib_1.__awaiter(void 0, void 0, void 0, function () { var start, end, md5; return tslib_1.__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) { schedule_work_1.scheduleWork(loadNext); } else { md5 = spark.end(); Logger_1.Logger.info('computed hash', md5); resolve(md5); } return [2 /*return*/]; } }); }); }; return loadNext(); }); }; //# sourceMappingURL=compute-md5.js.map