2024-02-22 14:34:50 +03:00
|
|
|
import * as colors from 'colorette'
|
2024-02-22 14:20:23 +03:00
|
|
|
import { spawn } from 'cross-spawn'
|
2023-10-22 20:18:12 +03:00
|
|
|
|
|
|
|
export function exec(cwd: string, ...cmd: string[]) {
|
|
|
|
return new Promise<void>((resolve, reject) => {
|
2024-06-24 00:20:10 +03:00
|
|
|
console.log(`${colors.blue('$')} ${cmd.map((it) => (it.includes(' ') ? JSON.stringify(it) : it)).join(' ')}`)
|
2023-10-22 20:18:12 +03:00
|
|
|
|
2024-02-22 14:20:23 +03:00
|
|
|
const proc = spawn(cmd[0], cmd.slice(1), {
|
2023-10-22 20:18:12 +03:00
|
|
|
stdio: 'inherit',
|
|
|
|
cwd,
|
|
|
|
})
|
|
|
|
|
2024-02-22 14:20:23 +03:00
|
|
|
proc.on('error', reject)
|
|
|
|
|
2023-10-22 20:18:12 +03:00
|
|
|
proc.on('close', (code) => {
|
|
|
|
if (code === 0) {
|
|
|
|
resolve()
|
|
|
|
} else {
|
2023-12-13 21:43:46 +03:00
|
|
|
reject(new Error(`Process "${cmd.join(' ')}" exited with code ${code}`))
|
2023-10-22 20:18:12 +03:00
|
|
|
}
|
|
|
|
})
|
|
|
|
})
|
|
|
|
}
|