@mirrormedia/lilith-draft-editor
Version:
## Installation
67 lines (59 loc) • 1.94 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.convertBlobToString = convertBlobToString;
exports.convertFilesToImageData = convertFilesToImageData;
exports.convertStringToFile = convertStringToFile;
var _jsSha = require("js-sha256");
async function convertFilesToMediaData(fileList, isValidFile, wrapResult) {
const files = Array.from(fileList);
const fileNamePostfix = new Intl.DateTimeFormat('fr-CA', {
year: 'numeric',
month: '2-digit',
day: '2-digit'
}).format(Date.now());
const tasks = files.map(async file => {
if (!isValidFile(file)) return;
const uInt8Data = await file.arrayBuffer();
const name = file.name;
const positionOfLastDot = name.lastIndexOf('.');
const filename = positionOfLastDot > -1 ? `${name.slice(0, positionOfLastDot)}_${fileNamePostfix}${name.slice(positionOfLastDot)}` : `${name}_${fileNamePostfix}`;
return wrapResult({
uid: (0, _jsSha.sha256)(uInt8Data),
name: filename,
type: file.type,
blobURL: convertBlobToString(file)
});
});
const results = await Promise.allSettled(tasks);
return results.filter(r => r.status === 'fulfilled').map(r => r.value).filter(r => Boolean(r));
}
function isImageFile(file) {
return file.type.startsWith('image/');
}
async function convertFilesToImageData(fileList) {
return convertFilesToMediaData(fileList, isImageFile, ({
uid,
name,
type,
blobURL
}) => ({
uid,
name,
type,
blobURL
}));
}
function blobToFile(blob, fileName, extension) {
return new File([blob], fileName, {
type: extension
});
}
function convertBlobToString(blob) {
return URL.createObjectURL(blob);
}
async function convertStringToFile(str, fileName, extension) {
const request = new Request(str);
return await fetch(request).then(response => response.blob()).then(blob => blobToFile(blob, fileName, extension ?? blob.type));
}