@sebgroup/frontend-tools
Version:
A set of frontend tools
61 lines (57 loc) • 2.13 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
exports.FileType = void 0;
(function (FileType) {
FileType["JSON"] = "json";
FileType["PDF"] = "pdf";
FileType["SpreadSheet"] = "xlsx";
FileType["XML"] = "xml";
})(exports.FileType || (exports.FileType = {}));
function downloadFile(content, fileName, type) {
const blob = toBlob(content, type);
save(blob, fileName);
}
function toBlob(content, type) {
const byteArray = typeof content === "string" ? toByteArray(content) : [content];
return new Blob(byteArray, { type: toContentType(type) });
}
function toByteArray(base64Data, sliceSize = 512) {
const byteCharacters = window.atob(base64Data);
const byteArrays = [];
for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) {
const slice = byteCharacters.slice(offset, offset + sliceSize);
const byteNumbers = new Array(slice.length);
for (let i = 0; i < slice.length; i++) {
byteNumbers[i] = slice.charCodeAt(i);
}
byteArrays.push(new Uint8Array(byteNumbers));
}
return byteArrays;
}
function toContentType(type) {
switch (type) {
case exports.FileType.PDF:
return "application/pdf";
case exports.FileType.SpreadSheet:
return "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
case exports.FileType.JSON:
return "application/json";
case exports.FileType.XML:
return "text/xml";
default:
return "text/plain";
}
}
function save(blob, fileName) {
const url = window.URL.createObjectURL(blob);
const downloadableLink = document.createElement("a");
downloadableLink.download = fileName;
downloadableLink.href = url;
downloadableLink.style.display = "none";
document.body.appendChild(downloadableLink);
downloadableLink.click();
downloadableLink.remove();
window.URL.revokeObjectURL(url);
}
exports.downloadFile = downloadFile;
//# sourceMappingURL=downloadFile.js.map