import { exec, spawn } from 'child_process'; import { IEnvironment } from '../types/environment'; export interface IProcessData { code: number; stderr: string[]; stdout: string[]; } /** * Spawn a process. * @param execp Executable * @param args Executable arguments * @param env Squeebot environment * @returns Process output */ export async function spawnProcess(execp: string, args: any[], env: IEnvironment): Promise { return new Promise((resolve): void => { const process = spawn(execp, args, { cwd: env.path }); const stdout: string[] = []; const stderr: string[] = []; process.stdout.on('data', (d: any) => { stdout.push(d.toString()); }); process.stderr.on('data', (d: any) => { stderr.push(d.toString()); }); process.on('exit', (code: number) => { resolve({ code, stderr, stdout, }); }); }); } /** * Execute an executable file while buffering its output. * @param execp Executable * @param env Squeebot environment * @returns Process output */ export async function execProcess(execp: string, env: IEnvironment): Promise { return new Promise((resolve): void => { exec(execp, (error: any, stdout: any, stderr: any): void => resolve({ code: error.code, stderr, stdout, })); }); }