[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/hlambda/hlambda-core/master/src/utils/execScriptCommand.js [Back]  [Original]

import path from 'path';
// import { exec, execSync } from 'child_process';
// import shellExec from 'shell-exec'; // Current version does not support custom cwd

import * as childProcess from 'child_process';

export const shellExec = (cmdInput, opts) => {
  const executable = Array.isArray(cmdInput) ? cmdInput.join(';') : cmdInput;
  const cwd = opts?.cwd ?? process.cwd();
  const options = {
    ...opts,
    stdio: 'pipe',
    cwd,
  };

  const { platform } = process;

  try {
    const cmd = platform === 'win32' ? 'cmd' : 'sh';
    const arg = platform === 'win32' ? '/C' : '-c';
    const child = childProcess.spawn(cmd, [arg, executable], options);

    return new Promise((resolve) => {
      const stdoutList = [];
      const stderrList = [];

      if (child.stdout) {
        child.stdout.on('data', (data) => {
          if (Buffer.isBuffer(data)) return stdoutList.push(data.toString());
          return stdoutList.push(data);
        });
      }

      if (child.stderr) {
        child.stderr.on('data', (data) => {
          if (Buffer.isBuffer(data)) return stderrList.push(data.toString());
          return stderrList.push(JSON.stringify(data));
        });
      }

      const getDefaultResult = () => {
        const stderr = stderrList.join('\n');
        const stdout = stdoutList.join('\n');
        return { stdout, stderr, cmd: executable, cwd };
      };

      child.on('error', (error) => resolve({ ...getDefaultResult(), error }));
      child.on('close', (code) => resolve({ ...getDefaultResult(), code }));
    });
  } catch (error) {
    return Promise.reject(error);
  }
};

export const execScriptCommand = async (command) => {
  const cwd = path.resolve('./metadata/');

  // console.log(shellExec.default);
  const data = await shellExec(command, { cwd })
    .then((dataObj) => {
      return dataObj;
    })
    .catch((error) => {
      console.log('[execScriptCommand]', error);
    });

  return data;
};

export default execScriptCommand;

Web Proxy Viewer  |  New URL  |  Original Page