UNPKG

@mirrormedia/lilith-draft-editor

Version:
67 lines (59 loc) 1.94 kB
"use strict"; 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)); }