Files
windows-user-space-emulator/page/src/zip-file.ts
2025-04-30 13:22:25 +02:00

43 lines
859 B
TypeScript

import JSZip from "jszip";
export type ProgressHandler = (
processed: number,
total: number,
filename: string,
) => void;
export interface FileEntry {
name: string;
data: ArrayBuffer;
}
export async function parseZipFile(
arrayBuffer: ArrayBuffer,
progressHandler?: ProgressHandler,
) {
const zip = await JSZip.loadAsync(arrayBuffer);
const files: Promise<FileEntry>[] = [];
const progress = {
files: 0,
processed: 0,
};
zip.forEach(function (relativePath, zipEntry) {
progress.files += 1;
files.push(
zipEntry.async("arraybuffer").then((data) => {
progress.processed += 1;
if (progressHandler) {
progressHandler(progress.processed, progress.files, relativePath);
}
return { name: relativePath, data };
}),
);
});
return await Promise.all(files);
}