exec.js 938 bytes
import { execFile } from "child_process";
import logger from "gulplog";
/**
 * @param {string} plugin_name
 * @param {string} cmd
 * @param {string[]} args
 * @param {import("child_process").ExecFileOptions} opts
 * @return {Promise<{ stdout: string|Buffer, stderr: string|Buffer }>}
export default function exec(plugin_name, cmd, args, opts = {}) {
  return new Promise((resolve, reject) => {
    execFile(cmd, args, opts, (error, stdout, stderr) => {
      if (!error) {
        logger.debug("%s: %s terminated successfully", plugin_name, cmd);
        return resolve({ stdout, stderr });
      logger.error("%s: %s failed: %s", plugin_name, cmd, error.message);
      logger.error("%s: command: `%s %s`", plugin_name, cmd, args.join(" "));
      logger.error("%s: stdout:\n%s", plugin_name, stdout.toString());
      logger.error("%s: stderr:\n%s", plugin_name, stderr.toString());
      reject(error);
    });
  });