All files / utils execute-command.ts

100% Statements 17/17
100% Branches 3/3
100% Functions 5/5
100% Lines 16/16

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 436x 6x   6x             6x 6x   6x 12x   6x 6x           6x 4x 2x           2x     2x     6x 2x        
import { spawn } from 'node:child_process';
import { isWindows } from './is-windows';
 
export const executeCommand = (
  command: string,
  args: string[],
  options: {
    cwd: string;
  },
): Promise<void> => {
  return new Promise((resolve, reject) => {
    const { cwd } = options;
 
    const normalizedArgs = args.map((arg) =>
      isWindows() ? `"${arg}"` : `'${arg}'`,
    );
    console.log('Executing command:', command, normalizedArgs.join(' '));
    const commandProcess = spawn(command, normalizedArgs, {
      cwd,
      shell: true,
      stdio: 'inherit',
    });
 
    commandProcess.on('close', (code: number | null) => {
      if (code !== 0) {
        reject(
          new Error(
            `Command process exited with error code '${code?.toString()}'.`,
          ),
        );
 
        return;
      }
 
      resolve();
    });
 
    commandProcess.on('error', (error: Error) => {
      reject(error);
    });
  });
};