diff --git a/tests/utils/zip-utils.ts b/tests/utils/zip-utils.ts new file mode 100644 index 0000000..417214c --- /dev/null +++ b/tests/utils/zip-utils.ts @@ -0,0 +1,31 @@ +import { basename, resolve as resolvePath } from "node:path"; +import { ZipFile } from "yazl"; + +export async function zipFile(path: string | string[], zipPath?: string): Promise { + const realPath = typeof path === "string" ? path : resolvePath(...path); + zipPath ||= basename(realPath); + + const zip = new ZipFile(); + zip.addFile(realPath, zipPath); + zip.end(); + + const chunks = [] as Buffer[]; + for await (const chunk of zip.outputStream) { + chunks.push(Buffer.from(chunk)); + } + + return Buffer.concat(chunks); +} + +export async function zipContent(content: string | Buffer, zipPath: string): Promise { + const zip = new ZipFile(); + zip.addBuffer(Buffer.from(content), zipPath); + zip.end(); + + const chunks = [] as Buffer[]; + for await (const chunk of zip.outputStream) { + chunks.push(Buffer.from(chunk)); + } + + return Buffer.concat(chunks); +}