UNPKG

datocms-client

Version:

For new DatoCMS users, we recommend @datocms/cma-client-node

106 lines (91 loc) 2.34 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.uploadToS3 = uploadToS3; exports["default"] = browser; function uploadToS3(file, url, _ref) { var onProgress = _ref.onProgress; var xhr = new XMLHttpRequest(); var promise = new Promise(function (resolve, reject) { if (onProgress && xhr.upload) { xhr.upload.onprogress = function (e) { if (e.lengthComputable) { var done = typeof e.loaded !== 'undefined' ? e.loaded : e.position; var total = typeof e.total !== 'undefined' ? e.total : e.totalSize; var percent = parseInt(done / total * 100, 10); onProgress({ type: 'upload', payload: { percent: percent } }); } }; } xhr.onreadystatechange = function () { if (xhr.readyState === 4) { if (xhr.status === 200) { resolve(); } else { reject(new Error(xhr.status)); } } }; xhr.addEventListener('error', reject, false); xhr.onabort = function () { reject(new Error('upload aborted')); }; xhr.open('PUT', url, true); xhr.send(file); }); var cancel = function cancel() { xhr.onreadystatechange = null; xhr.abort(); }; return { promise: promise, cancel: cancel }; } function browser(client, file, _ref2) { var onProgress = _ref2.onProgress, filename = _ref2.filename; var isCancelled = false; var _cancel = function cancel() { isCancelled = true; }; var promise = client.uploadRequest.create({ filename: filename || file.name }).then(function (_ref3) { var id = _ref3.id, url = _ref3.url; if (isCancelled) { return Promise.reject(new Error('upload aborted')); } if (onProgress) { onProgress({ type: 'uploadRequestComplete', payload: { id: id, url: url } }); } var _uploadToS = uploadToS3(file, url, { onProgress: onProgress }), uploadPromise = _uploadToS.promise, cancelUpload = _uploadToS.cancel; _cancel = cancelUpload; return uploadPromise.then(function () { return id; }); }); return { promise: promise, cancel: function cancel() { _cancel(); } }; }