Newer
Older
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
41
import { spawn } from 'child_process';
import { LogOutput, LogError, LogExit } from './Logger';
export interface Result {
command: string,
stdout: string,
stderr: string,
exitCode: Number
}
export default function Run(args: string[], log?: boolean): Promise<Result> {
let command = args.join(' ');
log && LogOutput(command);
const proc = spawn(args.shift() || 'echo', args);
let stdout: string[] = [], stderr: string[] = [];
proc.stdout.on('data', data => {
data = data.toString(); // safety
stdout.push(data);
log && LogOutput(data);
});
proc.stderr.on('data', data => {
data = data.toString(); // safety
stderr.push(data);
log && LogError(data);
});
return new Promise((resolve, reject) => {
proc.on('close', exitCode => {
log && LogExit(exitCode);
resolve({
command,
stdout: stdout.join('\n'),
stderr: stderr.join('\n'),
exitCode
});
});
});
}