function runScripts(scripts, files) { const spawnOptions = { env: Object.assign({}, process.env, {PATH: npmRunPath({cwd: __dirname})}), stdio: 'inherit' }; scripts.forEach(script => { const result = execa.sync(require.resolve('.bin/jscodeshift'), ['-t', script].concat(files), spawnOptions); if (result.error) { throw result.error; } }); }
return new Promise(function (resolve, reject) { var parsed = crossSpawnAsync._parse(cmd, args, opts); opts = objectAssign({ maxBuffer: TEN_MEBIBYTE, stripEof: true, preferLocal: true }, parsed.options); var handle = function (val) { if (opts.stripEof) { val = stripEof(val); } return val; }; if (opts.preferLocal) { opts.env = objectAssign({}, opts.env || process.env); opts.env[pathKey] = npmRunPath({ cwd: opts.cwd, path: opts.env[pathKey] }); } var spawned = childProcess.execFile(parsed.command, parsed.args, opts, function (err, stdout, stderr) { if (err) { err.stdout = stdout; err.stderr = stderr; reject(err); return; } resolve({ stdout: handle(stdout), stderr: handle(stderr) }); }); crossSpawnAsync._enoent.hookChildProcess(spawned, parsed); });
function handleArgs(cmd, args, opts) { var parsed; if (opts && opts.__winShell === true) { delete opts.__winShell; parsed = { command: cmd, args: args, options: opts, file: cmd, original: cmd }; } else { parsed = crossSpawnAsync._parse(cmd, args, opts); } opts = objectAssign({ maxBuffer: TEN_MEBIBYTE, stripEof: true, preferLocal: true, encoding: 'utf8' }, parsed.options); if (opts.preferLocal) { opts.env = objectAssign({}, opts.env || process.env); opts.env[pathKey] = npmRunPath({ cwd: opts.cwd, path: opts.env[pathKey] }); } return { cmd: parsed.command, args: parsed.args, opts: opts }; }
grunt.registerMultiTask('shell', 'Run shell commands', function () { var cb = this.async(); var opts = this.options({ stdout: true, stderr: true, stdin: true, failOnError: true, stdinRawMode: false, preferLocal: false, execOptions: { env: null } }); var cmd = typeof this.data === 'string' ? this.data : this.data.command; if (cmd === undefined) { throw new Error('`command` required'); } cmd = grunt.template.process(typeof cmd === 'function' ? cmd.apply(grunt, arguments) : cmd); if (opts.preferLocal === true) { opts.execOptions.env = opts.execOptions.env || objectAssign({}, process.env); opts.execOptions.env.PATH = npmRunPath({path: opts.execOptions.env.PATH}); } var cp = exec(cmd, opts.execOptions, function (err, stdout, stderr) { if (typeof opts.callback === 'function') { opts.callback.call(this, err, stdout, stderr, cb); } else { if (err && opts.failOnError) { grunt.warn(err); } cb(); } }.bind(this)); var captureOutput = function (child, output) { if (grunt.option('color') === false) { child.on('data', function (data) { output.write(chalk.stripColor(data)); }); } else { child.pipe(output); } }; grunt.verbose.writeln('Command:', chalk.yellow(cmd)); if (opts.stdout || grunt.option('verbose')) { captureOutput(cp.stdout, process.stdout); } if (opts.stderr || grunt.option('verbose')) { captureOutput(cp.stderr, process.stderr); } if (opts.stdin) { process.stdin.resume(); process.stdin.setEncoding('utf8'); if (opts.stdinRawMode && process.stdin.isTTY) { process.stdin.setRawMode(true); } process.stdin.pipe(cp.stdin); } });