UNPKG

formiojs

Version:

Common js library for client side interaction with <form.io>

123 lines (100 loc) 3.74 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _nativePromiseOnly = _interopRequireDefault(require("native-promise-only")); var _trim2 = _interopRequireDefault(require("lodash/trim")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var trim = function trim(text) { return (0, _trim2.default)(text, '/'); }; var path = function path(items) { return items.filter(function (item) { return !!item; }).map(trim).join('/'); }; var s3 = function s3(formio) { return { uploadFile: function uploadFile(file, fileName, dir, progressCallback) { return new _nativePromiseOnly.default(function (resolve, reject) { // Send the pre response to sign the upload. var pre = new XMLHttpRequest(); // This only fires on a network error. pre.onerror = function (err) { err.networkError = true; reject(err); }; pre.onabort = reject; pre.onload = function () { if (pre.status >= 200 && pre.status < 300) { var response = JSON.parse(pre.response); // Send the file with data. var xhr = new XMLHttpRequest(); if (typeof progressCallback === 'function') { xhr.upload.onprogress = progressCallback; } response.data.fileName = fileName; response.data.key = path([response.data.key, dir, fileName]); // Fire on network error. xhr.onerror = function (err) { err.networkError = true; reject(err); }; xhr.onload = function () { if (xhr.status >= 200 && xhr.status < 300) { resolve({ storage: 's3', name: fileName, bucket: response.bucket, key: response.data.key, url: path([response.url, response.data.key]), acl: response.data.acl, size: file.size, type: file.type }); } else { reject(xhr.response || 'Unable to upload file'); } }; xhr.onabort = reject; if (response.signed) { xhr.open('PUT', response.signed); xhr.setRequestHeader('Content-Type', file.type); xhr.send(file); } else { var fd = new FormData(); for (var key in response.data) { fd.append(key, response.data[key]); } fd.append('file', file); xhr.open('POST', response.url); xhr.send(fd); } } else { reject(pre.response || 'Unable to sign file'); } }; pre.open('POST', "".concat(formio.formUrl, "/storage/s3")); pre.setRequestHeader('Accept', 'application/json'); pre.setRequestHeader('Content-Type', 'application/json; charset=UTF-8'); var token = formio.getToken(); if (token) { pre.setRequestHeader('x-jwt-token', token); } pre.send(JSON.stringify({ name: path([dir, fileName]), size: file.size, type: file.type })); }); }, downloadFile: function downloadFile(file) { if (file.acl !== 'public-read') { return formio.makeRequest('file', "".concat(formio.formUrl, "/storage/s3?bucket=").concat(trim(file.bucket), "&key=").concat(trim(file.key)), 'GET'); } else { return _nativePromiseOnly.default.resolve(file); } } }; }; s3.title = 'S3'; var _default = s3; exports.default = _default;