import { unzipSync, zipSync } from "fflate"; type ZipFile = { name: string; data: BlobPart; }; export async function createZip(files: ZipFile[]) { const entries = await Promise.all( files.map(async (file) => { const data = new Uint8Array(await new Blob([file.data]).arrayBuffer()); return [file.name, data] as const; }), ); return new Blob([zipSync(Object.fromEntries(entries), { level: 0 })], { type: "application/zip" }); } export async function readZip(file: Blob) { const entries = unzipSync(new Uint8Array(await file.arrayBuffer())); return new Map(Object.entries(entries).map(([name, data]) => [name, new Blob([data])])); }