diginext-utils
Version:
README.md
86 lines • 3.84 kB
JavaScript
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
import saveAs from "file-saver";
import { isMobile } from "../device/index.js";
import { randomFileName } from "../string/random.js";
import { getExtensionFromMimeType } from "../string/url.js";
export const doGetFile = (url, data) => __awaiter(void 0, void 0, void 0, function* () {
const response = yield fetch(url);
if (!response.ok) {
return undefined;
}
const blob = yield response.blob();
const ext = getExtensionFromMimeType(blob.type);
const filename = (data === null || data === void 0 ? void 0 : data.filename) ? `${data === null || data === void 0 ? void 0 : data.filename}.${ext}` : `${randomFileName("img", 3)}.${ext}`;
const file = new File([blob], filename, {
type: blob.type,
});
return { file, filename };
});
export const doSaveFileDesktop = (url, data) => __awaiter(void 0, void 0, void 0, function* () {
//
if (!(data === null || data === void 0 ? void 0 : data.file)) {
const __data = yield doGetFile(url, data);
const file = __data === null || __data === void 0 ? void 0 : __data.file;
const filename = __data === null || __data === void 0 ? void 0 : __data.filename;
if (!file || !filename)
return false;
try {
saveAs(file, filename);
}
catch (error) {
window.open(url, "_self");
console.error(`saveWhenError error`, error);
}
}
return true;
});
export const doSaveFileMobile = (url, data) => __awaiter(void 0, void 0, void 0, function* () {
return new Promise((resolve, _reject) => __awaiter(void 0, void 0, void 0, function* () {
const __data = yield doGetFile(url, data);
const file = __data === null || __data === void 0 ? void 0 : __data.file;
const filename = __data === null || __data === void 0 ? void 0 : __data.filename;
if (!file || !filename)
return resolve(false);
navigator
.share({
files: [file],
title: filename,
})
.then(() => {
resolve(true);
// alert(0);
// console.log(0);
})
.catch((err) => __awaiter(void 0, void 0, void 0, function* () {
var _a, _b, _c, _d;
if ((_b = (_a = `${err}`).includes) === null || _b === void 0 ? void 0 : _b.call(_a, "AbortError"))
return resolve(false);
if ((_d = (_c = err === null || err === void 0 ? void 0 : err.message) === null || _c === void 0 ? void 0 : _c.includes) === null || _d === void 0 ? void 0 : _d.call(_c, "cancellation"))
return resolve(false);
console.error(`navigator error`, err);
yield doSaveFileDesktop(url, data);
resolve(true);
}));
}));
});
export function downloadByUrl(url, data) {
return __awaiter(this, void 0, void 0, function* () {
//
if (isMobile()) {
return doSaveFileMobile(url, data);
}
else {
return doSaveFileDesktop(url, data);
}
});
}
export default downloadByUrl;
//# sourceMappingURL=downloadByUrl.js.map