UNPKG

@trap_stevo/legendarybuilderproreact-ui

Version:

The legendary UI & utility API that makes your application a legendary application. ~ Created by Steven Compton

160 lines 7.18 kB
import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator"; import _slicedToArray from "@babel/runtime/helpers/slicedToArray"; import _regeneratorRuntime from "@babel/runtime/regenerator"; var fileTypeMapping = { video: ["mp4", "mkv", "avi", "mov", "webm"], audio: ["mp3", "wav", "aac", "flac", "ogg"], image: ["png", "jpg", "jpeg", "gif", "bmp", "webp", "svg"], text: ["txt", "md", "json", "csv", "log"], code: ["js", "ts", "jsx", "tsx", "html", "css", "py", "java", "c", "cpp", "cs", "sh", "xml", "yml", "yaml"], document: ["pdf", "doc", "docx", "xls", "xlsx", "ppt", "pptx", "odt", "ods", "odp"], archive: ["zip", "rar", "7z", "tar", "gz", "bz2"], binary: ["bin", "exe", "dll", "so", "deb", "rpm"], font: ["ttf", "otf", "woff", "woff2"], model3d: ["obj", "fbx", "glb", "gltf", "stl"] }; var mimeTypeMapping = { "video": "video/", "audio": "audio/", "text": "text/", "image": "image/", "model3d": "model/", "code": "text/x-", "font": "font/", "document": ["application/pdf", "application/msword", "application/vnd.openxmlformats-officedocument.wordprocessingml.document", "application/vnd.ms-powerpoint", "application/vnd.openxmlformats-officedocument.presentationml.presentation", "application/vnd.ms-excel", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"], "app-binary": "application/octet-stream", "binary": "binary/octet-stream" }; export function DetermineFileType(file) { var _name$split$pop; var contentType = file.contentType, name = file.name; var fileExtension = name === null || name === void 0 || (_name$split$pop = name.split(".").pop()) === null || _name$split$pop === void 0 ? void 0 : _name$split$pop.toLowerCase(); if (contentType) { for (var _i = 0, _Object$entries = Object.entries(mimeTypeMapping); _i < _Object$entries.length; _i++) { var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2), type = _Object$entries$_i[0], mimePrefix = _Object$entries$_i[1]; if (Array.isArray(mimePrefix)) { if (mimePrefix.includes(contentType)) { return type; } } else if (contentType.startsWith(mimePrefix)) { return type; } } } if (fileExtension) { for (var _i2 = 0, _Object$entries2 = Object.entries(fileTypeMapping); _i2 < _Object$entries2.length; _i2++) { var _Object$entries2$_i = _slicedToArray(_Object$entries2[_i2], 2), _type = _Object$entries2$_i[0], extensions = _Object$entries2$_i[1]; if (extensions.includes(fileExtension)) { return _type; } } } return "unknown"; } ; export function Download(_x) { return _Download.apply(this, arguments); } function _Download() { _Download = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(_ref) { var data, _ref$fileName, fileName, _ref$fileType, fileType, _ref$extType, extType, _ref$headers, headers, _ref$method, method, _ref$body, body, _ref$params, params, _ref$query, query, fileTypeMapping, fullFileType, url, options, queryString, blob, response, base64Data, byteCharacters, byteNumbers, i, byteArray, a; return _regeneratorRuntime.wrap(function _callee$(_context) { while (1) switch (_context.prev = _context.next) { case 0: data = _ref.data, _ref$fileName = _ref.fileName, fileName = _ref$fileName === void 0 ? "file" : _ref$fileName, _ref$fileType = _ref.fileType, fileType = _ref$fileType === void 0 ? "txt" : _ref$fileType, _ref$extType = _ref.extType, extType = _ref$extType === void 0 ? "txt" : _ref$extType, _ref$headers = _ref.headers, headers = _ref$headers === void 0 ? {} : _ref$headers, _ref$method = _ref.method, method = _ref$method === void 0 ? "GET" : _ref$method, _ref$body = _ref.body, body = _ref$body === void 0 ? null : _ref$body, _ref$params = _ref.params, params = _ref$params === void 0 ? {} : _ref$params, _ref$query = _ref.query, query = _ref$query === void 0 ? {} : _ref$query; fileTypeMapping = { "app-bin": "application/octet-stream", "bin": "binary/octet-stream", "txt": "text/plain", "json": "application/json", "mp4": "video/mp4", "png": "image/png", "jpg": "image/jpeg", "pdf": "application/pdf", "csv": "text/csv", "html": "text/html" }; fullFileType = fileTypeMapping[fileType] || fileType; _context.prev = 3; url = data; options = { method: method, headers: headers }; if (Object.keys(params).length > 0) { Object.keys(params).forEach(function (key) { url = url.replace(":".concat(key), encodeURIComponent(params[key])); }); } if (Object.keys(query).length > 0) { queryString = new URLSearchParams(query).toString(); url += (url.includes("?") ? "&" : "?") + queryString; } if (body && method !== "GET" && method !== "HEAD") { options.body = JSON.stringify(body); } if (!(typeof data === "string" && (data.startsWith("http") || data.startsWith("https")))) { _context.next = 20; break; } _context.next = 12; return fetch(url, options); case 12: response = _context.sent; if (response.ok) { _context.next = 15; break; } throw new Error("Did not download file | ".concat(fileName, ".").concat(fileType, ": ").concat(response.statusText)); case 15: _context.next = 17; return response.blob(); case 17: blob = _context.sent; _context.next = 21; break; case 20: if (typeof data === "string" && data.startsWith("data:")) { base64Data = data.split(",")[1]; byteCharacters = atob(base64Data); byteNumbers = new Array(byteCharacters.length); for (i = 0; i < byteCharacters.length; i++) { byteNumbers[i] = byteCharacters.charCodeAt(i); } byteArray = new Uint8Array(byteNumbers); blob = new Blob([byteArray], { type: fullFileType }); } else { blob = new Blob([data], { type: fullFileType }); } case 21: a = document.createElement("a"); a.href = URL.createObjectURL(blob); a.download = "".concat(fileName, ".").concat(extType ? extType : fileType); a.click(); URL.revokeObjectURL(a.href); _context.next = 31; break; case 28: _context.prev = 28; _context.t0 = _context["catch"](3); console.error("Did not download file | ".concat(fileName, ".").concat(extType ? extType : fileType, ": "), _context.t0); case 31: return _context.abrupt("return"); case 32: case "end": return _context.stop(); } }, _callee, null, [[3, 28]]); })); return _Download.apply(this, arguments); } ;