diff --git a/packages/server/src/util/zipwrap.ts b/packages/server/src/util/zipwrap.ts index 5f0ece2..ab2c3bb 100644 --- a/packages/server/src/util/zipwrap.ts +++ b/packages/server/src/util/zipwrap.ts @@ -1,6 +1,6 @@ import { type FileHandle, open } from "node:fs/promises"; import { orderBy } from "natural-orderby"; -import { ZipReader, Reader, type Entry } from "@zip.js/zip.js"; +import { ZipReader, Reader, type Entry, ZipReaderConstructorOptions } from "@zip.js/zip.js"; import EventEmitter from "node:events"; class FileReader extends Reader { @@ -55,10 +55,20 @@ class FileReader extends Reader { } } +class FileZipReader extends ZipReader { + constructor(private reader: FileReader, options?: ZipReaderConstructorOptions) { + super(reader, options); + } + override async close(): Promise { + super.close(); + await this.reader.close(); + } +} + export async function readZip(path: string): Promise<{ reader: ZipReader }> { - const reader = new ZipReader(new FileReader(path), { + const reader = new FileZipReader(new FileReader(path), { useCompressionStream: true, preventClose: false, });