1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
import { Either, type Traceable } from "./mod.ts";
export class ProcessError extends Error {}
export const getStdout = async (
{ item: cmd, logger: _logger }: Traceable<string[] | string>,
options: Deno.CommandOptions = {},
): Promise<Either<ProcessError, string>> => {
const logger = _logger.addTracer(() => "[getStdout]");
logger.log(`:> im gonna run this command!`, cmd);
const [exec, ...args] = (typeof cmd === "string") ? cmd.split(" ") : cmd;
const command = new Deno.Command(exec, {
args,
stdout: "piped",
stderr: "piped",
...options,
});
try {
const { code, stdout, stderr } = await command.output();
const stdoutText = new TextDecoder().decode(stdout);
const stderrText = new TextDecoder().decode(stderr);
if (code !== 0) {
logger.error(`i weceived an exit code of ${code} i wanna zeroooo :<`);
return Either.left<ProcessError, string>(
new ProcessError(`command failed\n${stderrText}`),
);
}
logger.log("yay! i got code 0 :3", cmd);
return Either.right<ProcessError, string>(stdoutText);
} catch (e) {
logger.error(`o.o wat`, e);
if (e instanceof Error) {
return Either.left<ProcessError, string>(e);
}
throw new Error("unknown error " + e);
}
};
|