Files
fressh/apps/mobile/scripts/script-lib.ts
EthanShoeDev f31d52bb00 signed script
2025-09-10 02:53:13 -04:00

44 lines
1.0 KiB
TypeScript

import * as child from 'child_process';
import * as path from 'path';
export const cmd = (
command: string,
options: { relativeCwd?: string; stdio?: child.StdioOptions } = {},
) =>
new Promise<{ exitCode: number; stdout: string; stderr: string }>(
(resolve, reject) => {
console.log(`cmd: ${command}`);
const proc = child.spawn(command, {
shell: true,
stdio: options.stdio ?? 'inherit',
cwd: options.relativeCwd
? path.resolve(process.cwd(), options.relativeCwd)
: process.cwd(),
});
let stdout = '';
let stderr = '';
proc.stdout?.on('data', (data) => {
stdout += data;
});
proc.stderr?.on('data', (data) => {
stderr += data;
});
process.once('SIGTERM', () => {
proc.kill('SIGTERM');
});
process.once('SIGINT', () => {
proc.kill('SIGINT');
});
proc.on('close', (code) => {
console.log(`cmd: ${command} closed with code ${code}`);
resolve({ exitCode: code ?? 0, stdout, stderr });
});
proc.on('error', (error) => {
reject(error);
});
},
);