22 lines
701 B
TypeScript
22 lines
701 B
TypeScript
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])]));
|
|
}
|