| 14 | } from "../service/seven_zip_service"; |
| 15 | |
| 16 | function runSpawn( |
| 17 | cmd: string, |
| 18 | args: string[], |
| 19 | opts: { cwd: string; timeout: number } |
| 20 | ): Promise<{ stdout: string; stderr: string }> { |
| 21 | return new Promise((resolve, reject) => { |
| 22 | const child = spawn(cmd, args, { cwd: opts.cwd, timeout: opts.timeout }); |
| 23 | let stdout = ""; |
| 24 | let stderr = ""; |
| 25 | child.stdout?.on("data", (d: Buffer) => (stdout += d.toString())); |
| 26 | child.stderr?.on("data", (d: Buffer) => (stderr += d.toString())); |
| 27 | child.on("error", reject); |
| 28 | child.on("close", (code) => { |
| 29 | if (code === 0) resolve({ stdout, stderr }); |
| 30 | else { |
| 31 | const err = new Error(`7zip exited with code ${code}: ${stderr || stdout}`); |
| 32 | (err as any).stdout = stdout; |
| 33 | (err as any).stderr = stderr; |
| 34 | reject(err); |
| 35 | } |
| 36 | }); |
| 37 | }); |
| 38 | } |
| 39 | |
| 40 | const COMPRESS_ERROR_MSG = { |
| 41 | invalidName: t("TXT_CODE_3aa9f36"), |