Filter unzip entries during .fig parse to skip non-essential files

Only decompress canvas.fig, canvas, and images/* entries.
Avoids decompressing metadata and other cruft in large .fig files.
This commit is contained in:
Danila Poyarkov 2026-03-09 02:58:13 +03:00
parent cf6747389a
commit 35bb98d1c8

View file

@ -45,7 +45,12 @@ function parseFigKiwiContainer(data: Uint8Array): FigKiwiPayload | null {
}
export async function parseFigFile(buffer: ArrayBuffer): Promise<SceneGraph> {
const zip = unzipSync(new Uint8Array(buffer))
const zip = unzipSync(new Uint8Array(buffer), {
filter: (file) =>
file.name === 'canvas.fig' ||
file.name === 'canvas' ||
(file.name.startsWith('images/') && file.name !== 'images/'),
})
const entries = Object.keys(zip)
let canvasData: Uint8Array | null = null