-
Notifications
You must be signed in to change notification settings - Fork 0
/
utils.ts
47 lines (40 loc) · 1.28 KB
/
utils.ts
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
42
43
44
45
46
47
import { ChildProcess, spawn } from 'child_process';
export function execCmd(command: string, input?: string): Promise<string> {
return new Promise((resolve, reject) => {
const parts = command.match(/(?:[^\s"]+|"[^"]*")+/g);
if (!parts) {
reject(new Error('Invalid command'));
return;
}
const [cmd, ...args] = parts.map((part) => part.replace(/"/g, ''));
const childProcess: ChildProcess = spawn(cmd, args);
let stdout = '';
let stderr = '';
childProcess.stdout?.on('data', (data) => {
stdout += data.toString();
if (!data.includes('DEBUG')) {
console.log(`stdout: ${data}`);
}
});
childProcess.stderr?.on('data', (data) => {
stderr += data.toString();
console.error(`stderr: ${data}`);
});
childProcess.on('error', (error) => {
reject(new Error(`Failed to start subprocess: ${error.message}`));
});
childProcess.on('close', (code) => {
if (code === 0) {
resolve(stdout);
} else {
reject(new Error(`Command failed with code ${code}: ${stderr}`));
}
});
if (input) {
setTimeout(() => {
childProcess.stdin?.write(input + '\n');
childProcess.stdin?.end();
}, 100); // Wait for 1 second before sending input
}
});
}