Files
ttstd-infinite-canvas/web/src/lib/zip.ts
ddcat666 6195d8d4f7 refactor(web): 界面工具 - 代码优化,替换重复的复制、打包、项目选择和主题切换实现
删除未再引用的文字扫光组件。复制提示、压缩包读写、项目多选和主题揭示的对外行为保持不变。
2026-10-01 11:40:08 +08:00

27 lines
909 B
TypeScript

import { unzipSync as unpack, zipSync as pack } from "fflate";
type ZipSource = BlobPart;
async function toBytes(data: ZipSource): Promise<Uint8Array> {
const buffer = await new Blob([data]).arrayBuffer();
return new Uint8Array(buffer);
}
export async function createZip(files: Array<{ name: string; data: ZipSource }>): Promise<Blob> {
const entries: Record<string, Uint8Array> = {};
for (const file of files) {
entries[file.name] = await toBytes(file.data);
}
const archive = pack(entries, { level: 0 });
return new Blob([archive], { type: "application/zip" });
}
export async function readZip(file: Blob): Promise<Map<string, Blob>> {
const opened = unpack(await toBytes(file));
const extracted = new Map<string, Blob>();
for (const [name, bytes] of Object.entries(opened)) {
extracted.set(name, new Blob([bytes]));
}
return extracted;
}