@ayonli/jsext
Version:
A JavaScript extension package for building strong and modern applications.
142 lines (138 loc) • 3.97 kB
JavaScript
;
var filetype = require('../../filetype.js');
function htmlAcceptToFileFilters(accept) {
const groups = [];
for (const type of accept.split(/\s*,\s*/)) {
if (type.endsWith("/*")) {
groups.push(type);
}
else {
const group = groups[groups.length - 1];
if (!group || typeof group === "string") {
groups.push([type]);
}
else {
group.push(type);
}
}
}
return groups.map(group => {
if (Array.isArray(group)) {
return group.map(type => {
const extensions = filetype.getExtensions(type);
if (!extensions.length) {
return undefined;
}
else {
return {
description: "",
accept: {
[type]: filetype.getExtensions(type),
},
};
}
});
}
else if (group === "*/*") {
return {
description: "All Files",
accept: {
"*/*": ["*"],
}
};
}
else {
const extensions = filetype.getExtensions(group);
if (!extensions.length) {
return undefined;
}
else if (group === "video/*") {
return {
description: "Video Files",
accept: { [group]: extensions },
};
}
else if (group === "audio/*") {
return {
description: "Audio Files",
accept: { [group]: extensions },
};
}
else if (group === "image/*") {
return {
description: "Image Files",
accept: { [group]: extensions },
};
}
else if (group === "text/*") {
return {
description: "Text Files",
accept: { [group]: extensions },
};
}
else {
return {
description: "",
accept: { [group]: extensions },
};
}
}
}).flat().filter(item => !!item);
}
async function browserPickFile(type = "", options = {}) {
try {
if (options.forSave) {
return await globalThis["showSaveFilePicker"]({
types: type ? htmlAcceptToFileFilters(type) : [],
suggestedName: options.defaultName,
});
}
else {
const [handle] = await globalThis["showOpenFilePicker"]({
types: type ? htmlAcceptToFileFilters(type) : [],
});
return handle !== null && handle !== void 0 ? handle : null;
}
}
catch (err) {
if (err.name === "AbortError") {
return null;
}
else {
throw err;
}
}
}
async function browserPickFiles(type = "") {
try {
return await globalThis["showOpenFilePicker"]({
types: type ? htmlAcceptToFileFilters(type) : [],
multiple: true,
});
}
catch (err) {
if (err.name === "AbortError") {
return [];
}
else {
throw err;
}
}
}
async function browserPickFolder() {
try {
return await globalThis["showDirectoryPicker"]();
}
catch (err) {
if (err.name === "AbortError") {
return null;
}
else {
throw err;
}
}
}
exports.browserPickFile = browserPickFile;
exports.browserPickFiles = browserPickFiles;
exports.browserPickFolder = browserPickFolder;
//# sourceMappingURL=file.js.map