import fsp from "node:fs/promises";
import path from "node:path";
import { spawn } from "node:child_process";
function spawnUnzip(zipPath: string, outputDir: string): Promise<boolean> {
return new Promise((resolve) => {
const child = spawn("unzip", ["-o", zipPath, "-d", outputDir], { stdio: "ignore" });
child.on("error", () => resolve(false));
child.on("exit", (code) => resolve(code === 0));
});
}
export async function materializeConvertZip(args: { convert_zip_base64: string; output_dir: string }) {
const outDir = path.resolve(args.output_dir);
await fsp.mkdir(outDir, { recursive: true });
const buf = Buffer.from(args.convert_zip_base64, "base64");
const zipPath = path.join(outDir, "assets.zip");
await fsp.writeFile(zipPath, buf);
const extracted = await spawnUnzip(zipPath, outDir);
return { output_dir: outDir, zip_path: zipPath, extracted };
}