ngx-admin/scripts/docs/run-command.ts
2020-04-21 19:48:00 +03:00

37 lines
1,022 B
TypeScript

import { exec } from 'child_process';
import { promisify } from 'util';
export interface RunCommandOptions {
cwd?: string;
showLog?: boolean;
}
const DEFAULT_OPTIONS: RunCommandOptions = { cwd: process.cwd(), showLog: false };
export async function runCommand(command: string, options?: RunCommandOptions) {
let { cwd, showLog } = Object.assign({}, DEFAULT_OPTIONS, options);
try {
console.log(`Running "${command}" in "${cwd}"`);
const { stdout, stderr } = await promisify(exec)(command, { cwd });
if (showLog && stdout) {
console.log(stdout);
}
if (stderr) {
console.log(`stderr from "${command}" in "${cwd}"`);
console.warn(stderr);
}
} catch ({ message, stdout, stderr }) {
let errorMessage = `Error running "${command}" in "${cwd}": ${message}.`;
if (stdout) {
errorMessage += `\nstdout: ${stdout}`;
console.error(stdout);
}
if (stderr) {
errorMessage += `\nstderr: ${stderr}`;
}
throw new Error(errorMessage);
}
}