@coveo/semantic-monorepo-tools
Version:
A library of helper functions to do SemVer2 compliant releases from Conventional Commits in monorepos
34 lines (33 loc) • 1.23 kB
JavaScript
import { spawn } from "node:child_process";
import defaultLogger from "./logger.js";
export default function (command, args, logger = defaultLogger, options = {}) {
const loggableArgs = args.join(" ");
logger?.('executing "%s %s"', command, loggableArgs);
let stdout = "";
let stderr = "";
const { encoding, ...spawnOptions } = {
encoding: "utf-8",
shell: process.platform === "win32" ? "powershell" : undefined,
...options,
};
return new Promise((resolve, reject) => {
const childProcess = spawn(command, args, spawnOptions);
childProcess.stdout.on("data", (data) => {
logger?.(`STDOUT: ${data}`);
stdout += data.toString(encoding);
});
childProcess.stderr.on("data", (data) => {
logger?.(`STDERR: ${data}`);
stderr += data.toString(encoding);
});
childProcess.on("close", (code, signal) => {
logger?.(`${command} ${loggableArgs} finished with code ${code} and signal '${signal}'`);
if (code) {
reject({ stdout, stderr });
}
else {
resolve({ stdout, stderr });
}
});
});
}