nav tabs on admin dashboard
This commit is contained in:
208
node_modules/execa/index.js
generated
vendored
208
node_modules/execa/index.js
generated
vendored
@@ -1,6 +1,6 @@
|
||||
'use strict';
|
||||
const path = require('path');
|
||||
const childProcess = require('child_process');
|
||||
const util = require('util');
|
||||
const crossSpawn = require('cross-spawn');
|
||||
const stripEof = require('strip-eof');
|
||||
const npmRunPath = require('npm-run-path');
|
||||
@@ -16,18 +16,26 @@ const TEN_MEGABYTES = 1000 * 1000 * 10;
|
||||
function handleArgs(cmd, args, opts) {
|
||||
let parsed;
|
||||
|
||||
if (opts && opts.env && opts.extendEnv !== false) {
|
||||
opts = Object.assign({
|
||||
extendEnv: true,
|
||||
env: {}
|
||||
}, opts);
|
||||
|
||||
if (opts.extendEnv) {
|
||||
opts.env = Object.assign({}, process.env, opts.env);
|
||||
}
|
||||
|
||||
if (opts && opts.__winShell === true) {
|
||||
if (opts.__winShell === true) {
|
||||
delete opts.__winShell;
|
||||
parsed = {
|
||||
command: cmd,
|
||||
args,
|
||||
options: opts,
|
||||
file: cmd,
|
||||
original: cmd
|
||||
original: {
|
||||
cmd,
|
||||
args
|
||||
}
|
||||
};
|
||||
} else {
|
||||
parsed = crossSpawn._parse(cmd, args, opts);
|
||||
@@ -35,6 +43,7 @@ function handleArgs(cmd, args, opts) {
|
||||
|
||||
opts = Object.assign({
|
||||
maxBuffer: TEN_MEGABYTES,
|
||||
buffer: true,
|
||||
stripEof: true,
|
||||
preferLocal: true,
|
||||
localDir: parsed.options.cwd || process.cwd(),
|
||||
@@ -49,6 +58,16 @@ function handleArgs(cmd, args, opts) {
|
||||
opts.env = npmRunPath.env(Object.assign({}, opts, {cwd: opts.localDir}));
|
||||
}
|
||||
|
||||
if (opts.detached) {
|
||||
// #115
|
||||
opts.cleanup = false;
|
||||
}
|
||||
|
||||
if (process.platform === 'win32' && path.basename(parsed.command) === 'cmd.exe') {
|
||||
// #116
|
||||
parsed.args.unshift('/q');
|
||||
}
|
||||
|
||||
return {
|
||||
cmd: parsed.command,
|
||||
args: parsed.args,
|
||||
@@ -57,9 +76,7 @@ function handleArgs(cmd, args, opts) {
|
||||
};
|
||||
}
|
||||
|
||||
function handleInput(spawned, opts) {
|
||||
const input = opts.input;
|
||||
|
||||
function handleInput(spawned, input) {
|
||||
if (input === null || input === undefined) {
|
||||
return;
|
||||
}
|
||||
@@ -100,14 +117,21 @@ function handleShell(fn, cmd, opts) {
|
||||
return fn(file, args, opts);
|
||||
}
|
||||
|
||||
function getStream(process, stream, encoding, maxBuffer) {
|
||||
function getStream(process, stream, {encoding, buffer, maxBuffer}) {
|
||||
if (!process[stream]) {
|
||||
return null;
|
||||
}
|
||||
|
||||
let ret;
|
||||
|
||||
if (encoding) {
|
||||
if (!buffer) {
|
||||
// TODO: Use `ret = util.promisify(stream.finished)(process[stream]);` when targeting Node.js 10
|
||||
ret = new Promise((resolve, reject) => {
|
||||
process[stream]
|
||||
.once('end', resolve)
|
||||
.once('error', reject);
|
||||
});
|
||||
} else if (encoding) {
|
||||
ret = _getStream(process[stream], {
|
||||
encoding,
|
||||
maxBuffer
|
||||
@@ -123,16 +147,58 @@ function getStream(process, stream, encoding, maxBuffer) {
|
||||
});
|
||||
}
|
||||
|
||||
module.exports = (cmd, args, opts) => {
|
||||
function makeError(result, options) {
|
||||
const {stdout, stderr} = result;
|
||||
|
||||
let err = result.error;
|
||||
const {code, signal} = result;
|
||||
|
||||
const {parsed, joinedCmd} = options;
|
||||
const timedOut = options.timedOut || false;
|
||||
|
||||
if (!err) {
|
||||
let output = '';
|
||||
|
||||
if (Array.isArray(parsed.opts.stdio)) {
|
||||
if (parsed.opts.stdio[2] !== 'inherit') {
|
||||
output += output.length > 0 ? stderr : `\n${stderr}`;
|
||||
}
|
||||
|
||||
if (parsed.opts.stdio[1] !== 'inherit') {
|
||||
output += `\n${stdout}`;
|
||||
}
|
||||
} else if (parsed.opts.stdio !== 'inherit') {
|
||||
output = `\n${stderr}${stdout}`;
|
||||
}
|
||||
|
||||
err = new Error(`Command failed: ${joinedCmd}${output}`);
|
||||
err.code = code < 0 ? errname(code) : code;
|
||||
}
|
||||
|
||||
err.stdout = stdout;
|
||||
err.stderr = stderr;
|
||||
err.failed = true;
|
||||
err.signal = signal || null;
|
||||
err.cmd = joinedCmd;
|
||||
err.timedOut = timedOut;
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
function joinCmd(cmd, args) {
|
||||
let joinedCmd = cmd;
|
||||
|
||||
if (Array.isArray(args) && args.length > 0) {
|
||||
joinedCmd += ' ' + args.join(' ');
|
||||
}
|
||||
|
||||
return joinedCmd;
|
||||
}
|
||||
|
||||
module.exports = (cmd, args, opts) => {
|
||||
const parsed = handleArgs(cmd, args, opts);
|
||||
const encoding = parsed.opts.encoding;
|
||||
const maxBuffer = parsed.opts.maxBuffer;
|
||||
const {encoding, buffer, maxBuffer} = parsed.opts;
|
||||
const joinedCmd = joinCmd(cmd, args);
|
||||
|
||||
let spawned;
|
||||
try {
|
||||
@@ -151,11 +217,15 @@ module.exports = (cmd, args, opts) => {
|
||||
let timeoutId = null;
|
||||
let timedOut = false;
|
||||
|
||||
const cleanupTimeout = () => {
|
||||
const cleanup = () => {
|
||||
if (timeoutId) {
|
||||
clearTimeout(timeoutId);
|
||||
timeoutId = null;
|
||||
}
|
||||
|
||||
if (removeExitHandler) {
|
||||
removeExitHandler();
|
||||
}
|
||||
};
|
||||
|
||||
if (parsed.opts.timeout > 0) {
|
||||
@@ -168,19 +238,19 @@ module.exports = (cmd, args, opts) => {
|
||||
|
||||
const processDone = new Promise(resolve => {
|
||||
spawned.on('exit', (code, signal) => {
|
||||
cleanupTimeout();
|
||||
cleanup();
|
||||
resolve({code, signal});
|
||||
});
|
||||
|
||||
spawned.on('error', err => {
|
||||
cleanupTimeout();
|
||||
resolve({err});
|
||||
cleanup();
|
||||
resolve({error: err});
|
||||
});
|
||||
|
||||
if (spawned.stdin) {
|
||||
spawned.stdin.on('error', err => {
|
||||
cleanupTimeout();
|
||||
resolve({err});
|
||||
cleanup();
|
||||
resolve({error: err});
|
||||
});
|
||||
}
|
||||
});
|
||||
@@ -195,55 +265,27 @@ module.exports = (cmd, args, opts) => {
|
||||
}
|
||||
}
|
||||
|
||||
const promise = pFinally(Promise.all([
|
||||
const handlePromise = () => pFinally(Promise.all([
|
||||
processDone,
|
||||
getStream(spawned, 'stdout', encoding, maxBuffer),
|
||||
getStream(spawned, 'stderr', encoding, maxBuffer)
|
||||
getStream(spawned, 'stdout', {encoding, buffer, maxBuffer}),
|
||||
getStream(spawned, 'stderr', {encoding, buffer, maxBuffer})
|
||||
]).then(arr => {
|
||||
const result = arr[0];
|
||||
const stdout = arr[1];
|
||||
const stderr = arr[2];
|
||||
result.stdout = arr[1];
|
||||
result.stderr = arr[2];
|
||||
|
||||
let err = result.err;
|
||||
const code = result.code;
|
||||
const signal = result.signal;
|
||||
|
||||
if (removeExitHandler) {
|
||||
removeExitHandler();
|
||||
}
|
||||
|
||||
if (err || code !== 0 || signal !== null) {
|
||||
if (!err) {
|
||||
let output = '';
|
||||
|
||||
if (Array.isArray(parsed.opts.stdio)) {
|
||||
if (parsed.opts.stdio[2] !== 'inherit') {
|
||||
output += output.length > 0 ? stderr : `\n${stderr}`;
|
||||
}
|
||||
|
||||
if (parsed.opts.stdio[1] !== 'inherit') {
|
||||
output += `\n${stdout}`;
|
||||
}
|
||||
} else if (parsed.opts.stdio !== 'inherit') {
|
||||
output = `\n${stderr}${stdout}`;
|
||||
}
|
||||
|
||||
err = new Error(`Command failed: ${joinedCmd}${output}`);
|
||||
err.code = code < 0 ? errname(code) : code;
|
||||
}
|
||||
if (result.error || result.code !== 0 || result.signal !== null) {
|
||||
const err = makeError(result, {
|
||||
joinedCmd,
|
||||
parsed,
|
||||
timedOut
|
||||
});
|
||||
|
||||
// TODO: missing some timeout logic for killed
|
||||
// https://github.com/nodejs/node/blob/master/lib/child_process.js#L203
|
||||
// err.killed = spawned.killed || killed;
|
||||
err.killed = err.killed || spawned.killed;
|
||||
|
||||
err.stdout = stdout;
|
||||
err.stderr = stderr;
|
||||
err.failed = true;
|
||||
err.signal = signal || null;
|
||||
err.cmd = joinedCmd;
|
||||
err.timedOut = timedOut;
|
||||
|
||||
if (!parsed.opts.reject) {
|
||||
return err;
|
||||
}
|
||||
@@ -252,8 +294,8 @@ module.exports = (cmd, args, opts) => {
|
||||
}
|
||||
|
||||
return {
|
||||
stdout: handleOutput(parsed.opts, stdout),
|
||||
stderr: handleOutput(parsed.opts, stderr),
|
||||
stdout: handleOutput(parsed.opts, result.stdout),
|
||||
stderr: handleOutput(parsed.opts, result.stderr),
|
||||
code: 0,
|
||||
failed: false,
|
||||
killed: false,
|
||||
@@ -265,45 +307,55 @@ module.exports = (cmd, args, opts) => {
|
||||
|
||||
crossSpawn._enoent.hookChildProcess(spawned, parsed.parsed);
|
||||
|
||||
handleInput(spawned, parsed.opts);
|
||||
handleInput(spawned, parsed.opts.input);
|
||||
|
||||
spawned.then = promise.then.bind(promise);
|
||||
spawned.catch = promise.catch.bind(promise);
|
||||
spawned.then = (onfulfilled, onrejected) => handlePromise().then(onfulfilled, onrejected);
|
||||
spawned.catch = onrejected => handlePromise().catch(onrejected);
|
||||
|
||||
return spawned;
|
||||
};
|
||||
|
||||
module.exports.stdout = function () {
|
||||
// TODO: set `stderr: 'ignore'` when that option is implemented
|
||||
return module.exports.apply(null, arguments).then(x => x.stdout);
|
||||
};
|
||||
// TODO: set `stderr: 'ignore'` when that option is implemented
|
||||
module.exports.stdout = (...args) => module.exports(...args).then(x => x.stdout);
|
||||
|
||||
module.exports.stderr = function () {
|
||||
// TODO: set `stdout: 'ignore'` when that option is implemented
|
||||
return module.exports.apply(null, arguments).then(x => x.stderr);
|
||||
};
|
||||
// TODO: set `stdout: 'ignore'` when that option is implemented
|
||||
module.exports.stderr = (...args) => module.exports(...args).then(x => x.stderr);
|
||||
|
||||
module.exports.shell = (cmd, opts) => handleShell(module.exports, cmd, opts);
|
||||
|
||||
module.exports.sync = (cmd, args, opts) => {
|
||||
const parsed = handleArgs(cmd, args, opts);
|
||||
const joinedCmd = joinCmd(cmd, args);
|
||||
|
||||
if (isStream(parsed.opts.input)) {
|
||||
throw new TypeError('The `input` option cannot be a stream in sync mode');
|
||||
}
|
||||
|
||||
const result = childProcess.spawnSync(parsed.cmd, parsed.args, parsed.opts);
|
||||
result.code = result.status;
|
||||
|
||||
if (result.error || result.status !== 0) {
|
||||
throw (result.error || new Error(result.stderr === '' ? result.stdout : result.stderr));
|
||||
if (result.error || result.status !== 0 || result.signal !== null) {
|
||||
const err = makeError(result, {
|
||||
joinedCmd,
|
||||
parsed
|
||||
});
|
||||
|
||||
if (!parsed.opts.reject) {
|
||||
return err;
|
||||
}
|
||||
|
||||
throw err;
|
||||
}
|
||||
|
||||
result.stdout = handleOutput(parsed.opts, result.stdout);
|
||||
result.stderr = handleOutput(parsed.opts, result.stderr);
|
||||
|
||||
return result;
|
||||
return {
|
||||
stdout: handleOutput(parsed.opts, result.stdout),
|
||||
stderr: handleOutput(parsed.opts, result.stderr),
|
||||
code: 0,
|
||||
failed: false,
|
||||
signal: null,
|
||||
cmd: joinedCmd,
|
||||
timedOut: false
|
||||
};
|
||||
};
|
||||
|
||||
module.exports.shellSync = (cmd, opts) => handleShell(module.exports.sync, cmd, opts);
|
||||
|
||||
module.exports.spawn = util.deprecate(module.exports, 'execa.spawn() is deprecated. Use execa() instead.');
|
||||
|
||||
38
node_modules/execa/lib/errname.js
generated
vendored
38
node_modules/execa/lib/errname.js
generated
vendored
@@ -1,24 +1,30 @@
|
||||
'use strict';
|
||||
// The Node team wants to deprecate `process.bind(...)`.
|
||||
// https://github.com/nodejs/node/pull/2768
|
||||
//
|
||||
// However, we need the 'uv' binding for errname support.
|
||||
// This is a defensive wrapper around it so `execa` will not fail entirely if it stops working someday.
|
||||
//
|
||||
// If this ever stops working. See: https://github.com/sindresorhus/execa/issues/31#issuecomment-215939939 for another possible solution.
|
||||
// Older verions of Node.js might not have `util.getSystemErrorName()`.
|
||||
// In that case, fall back to a deprecated internal.
|
||||
const util = require('util');
|
||||
|
||||
let uv;
|
||||
|
||||
try {
|
||||
uv = process.binding('uv');
|
||||
if (typeof util.getSystemErrorName === 'function') {
|
||||
module.exports = util.getSystemErrorName;
|
||||
} else {
|
||||
try {
|
||||
uv = process.binding('uv');
|
||||
|
||||
if (typeof uv.errname !== 'function') {
|
||||
throw new TypeError('uv.errname is not a function');
|
||||
if (typeof uv.errname !== 'function') {
|
||||
throw new TypeError('uv.errname is not a function');
|
||||
}
|
||||
} catch (err) {
|
||||
console.error('execa/lib/errname: unable to establish process.binding(\'uv\')', err);
|
||||
uv = null;
|
||||
}
|
||||
} catch (err) {
|
||||
console.error('execa/lib/errname: unable to establish process.binding(\'uv\')', err);
|
||||
uv = null;
|
||||
|
||||
module.exports = code => errname(uv, code);
|
||||
}
|
||||
|
||||
// Used for testing the fallback behavior
|
||||
module.exports.__test__ = errname;
|
||||
|
||||
function errname(uv, code) {
|
||||
if (uv) {
|
||||
return uv.errname(code);
|
||||
@@ -31,7 +37,3 @@ function errname(uv, code) {
|
||||
return `Unknown system error ${code}`;
|
||||
}
|
||||
|
||||
module.exports = code => errname(uv, code);
|
||||
|
||||
// Used for testing the fallback behavior
|
||||
module.exports.__test__ = errname;
|
||||
|
||||
6
node_modules/execa/node_modules/cross-spawn/CHANGELOG.md
generated
vendored
6
node_modules/execa/node_modules/cross-spawn/CHANGELOG.md
generated
vendored
@@ -1,6 +0,0 @@
|
||||
## 5.0.0 - 2016-10-30
|
||||
|
||||
- Add support for `options.shell`
|
||||
- Improve parsing of shebangs by using [`shebang-command`](https://github.com/kevva/shebang-command) module
|
||||
- Refactor some code to make it more clear
|
||||
- Update README caveats
|
||||
19
node_modules/execa/node_modules/cross-spawn/LICENSE
generated
vendored
19
node_modules/execa/node_modules/cross-spawn/LICENSE
generated
vendored
@@ -1,19 +0,0 @@
|
||||
Copyright (c) 2014 IndigoUnited
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is furnished
|
||||
to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
85
node_modules/execa/node_modules/cross-spawn/README.md
generated
vendored
85
node_modules/execa/node_modules/cross-spawn/README.md
generated
vendored
@@ -1,85 +0,0 @@
|
||||
# cross-spawn
|
||||
|
||||
[![NPM version][npm-image]][npm-url] [![Downloads][downloads-image]][npm-url] [![Build Status][travis-image]][travis-url] [![Build status][appveyor-image]][appveyor-url] [![Dependency status][david-dm-image]][david-dm-url] [![Dev Dependency status][david-dm-dev-image]][david-dm-dev-url]
|
||||
|
||||
[npm-url]:https://npmjs.org/package/cross-spawn
|
||||
[downloads-image]:http://img.shields.io/npm/dm/cross-spawn.svg
|
||||
[npm-image]:http://img.shields.io/npm/v/cross-spawn.svg
|
||||
[travis-url]:https://travis-ci.org/IndigoUnited/node-cross-spawn
|
||||
[travis-image]:http://img.shields.io/travis/IndigoUnited/node-cross-spawn/master.svg
|
||||
[appveyor-url]:https://ci.appveyor.com/project/satazor/node-cross-spawn
|
||||
[appveyor-image]:https://img.shields.io/appveyor/ci/satazor/node-cross-spawn/master.svg
|
||||
[david-dm-url]:https://david-dm.org/IndigoUnited/node-cross-spawn
|
||||
[david-dm-image]:https://img.shields.io/david/IndigoUnited/node-cross-spawn.svg
|
||||
[david-dm-dev-url]:https://david-dm.org/IndigoUnited/node-cross-spawn#info=devDependencies
|
||||
[david-dm-dev-image]:https://img.shields.io/david/dev/IndigoUnited/node-cross-spawn.svg
|
||||
|
||||
A cross platform solution to node's spawn and spawnSync.
|
||||
|
||||
|
||||
## Installation
|
||||
|
||||
`$ npm install cross-spawn`
|
||||
|
||||
If you are using `spawnSync` on node 0.10 or older, you will also need to install `spawn-sync`:
|
||||
|
||||
`$ npm install spawn-sync`
|
||||
|
||||
|
||||
## Why
|
||||
|
||||
Node has issues when using spawn on Windows:
|
||||
|
||||
- It ignores [PATHEXT](https://github.com/joyent/node/issues/2318)
|
||||
- It does not support [shebangs](http://pt.wikipedia.org/wiki/Shebang)
|
||||
- No `options.shell` support on node < v6
|
||||
- It does not allow you to run `del` or `dir`
|
||||
|
||||
All these issues are handled correctly by `cross-spawn`.
|
||||
There are some known modules, such as [win-spawn](https://github.com/ForbesLindesay/win-spawn), that try to solve this but they are either broken or provide faulty escaping of shell arguments.
|
||||
|
||||
|
||||
## Usage
|
||||
|
||||
Exactly the same way as node's [`spawn`](https://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options) or [`spawnSync`](https://nodejs.org/api/child_process.html#child_process_child_process_spawnsync_command_args_options), so it's a drop in replacement.
|
||||
|
||||
|
||||
```js
|
||||
var spawn = require('cross-spawn');
|
||||
|
||||
// Spawn NPM asynchronously
|
||||
var child = spawn('npm', ['list', '-g', '-depth', '0'], { stdio: 'inherit' });
|
||||
|
||||
// Spawn NPM synchronously
|
||||
var results = spawn.sync('npm', ['list', '-g', '-depth', '0'], { stdio: 'inherit' });
|
||||
```
|
||||
|
||||
|
||||
## Caveats
|
||||
|
||||
#### `options.shell` as an alternative to `cross-spawn`
|
||||
|
||||
Starting from node v6, `spawn` has a `shell` option that allows you run commands from within a shell. This new option solves most of the problems that `cross-spawn` attempts to solve, but:
|
||||
|
||||
- It's not supported in node < v6
|
||||
- It has no support for shebangs on Windows
|
||||
- You must manually escape the command and arguments which is very error prone, specially when passing user input
|
||||
|
||||
If you are using the `shell` option to spawn a command in a cross platform way, consider using `cross-spawn` instead. You have been warned.
|
||||
|
||||
|
||||
#### Shebangs
|
||||
|
||||
While `cross-spawn` handles shebangs on Windows, its support is limited: e.g.: it doesn't handle arguments after the path, e.g.: `#!/bin/bash -e`.
|
||||
|
||||
Remember to always test your code on Windows!
|
||||
|
||||
|
||||
## Tests
|
||||
|
||||
`$ npm test`
|
||||
|
||||
|
||||
## License
|
||||
|
||||
Released under the [MIT License](http://www.opensource.org/licenses/mit-license.php).
|
||||
59
node_modules/execa/node_modules/cross-spawn/index.js
generated
vendored
59
node_modules/execa/node_modules/cross-spawn/index.js
generated
vendored
@@ -1,59 +0,0 @@
|
||||
'use strict';
|
||||
|
||||
var cp = require('child_process');
|
||||
var parse = require('./lib/parse');
|
||||
var enoent = require('./lib/enoent');
|
||||
|
||||
var cpSpawnSync = cp.spawnSync;
|
||||
|
||||
function spawn(command, args, options) {
|
||||
var parsed;
|
||||
var spawned;
|
||||
|
||||
// Parse the arguments
|
||||
parsed = parse(command, args, options);
|
||||
|
||||
// Spawn the child process
|
||||
spawned = cp.spawn(parsed.command, parsed.args, parsed.options);
|
||||
|
||||
// Hook into child process "exit" event to emit an error if the command
|
||||
// does not exists, see: https://github.com/IndigoUnited/node-cross-spawn/issues/16
|
||||
enoent.hookChildProcess(spawned, parsed);
|
||||
|
||||
return spawned;
|
||||
}
|
||||
|
||||
function spawnSync(command, args, options) {
|
||||
var parsed;
|
||||
var result;
|
||||
|
||||
if (!cpSpawnSync) {
|
||||
try {
|
||||
cpSpawnSync = require('spawn-sync'); // eslint-disable-line global-require
|
||||
} catch (ex) {
|
||||
throw new Error(
|
||||
'In order to use spawnSync on node 0.10 or older, you must ' +
|
||||
'install spawn-sync:\n\n' +
|
||||
' npm install spawn-sync --save'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// Parse the arguments
|
||||
parsed = parse(command, args, options);
|
||||
|
||||
// Spawn the child process
|
||||
result = cpSpawnSync(parsed.command, parsed.args, parsed.options);
|
||||
|
||||
// Analyze if the command does not exists, see: https://github.com/IndigoUnited/node-cross-spawn/issues/16
|
||||
result.error = result.error || enoent.verifyENOENTSync(result.status, parsed);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
module.exports = spawn;
|
||||
module.exports.spawn = spawn;
|
||||
module.exports.sync = spawnSync;
|
||||
|
||||
module.exports._parse = parse;
|
||||
module.exports._enoent = enoent;
|
||||
73
node_modules/execa/node_modules/cross-spawn/lib/enoent.js
generated
vendored
73
node_modules/execa/node_modules/cross-spawn/lib/enoent.js
generated
vendored
@@ -1,73 +0,0 @@
|
||||
'use strict';
|
||||
|
||||
var isWin = process.platform === 'win32';
|
||||
var resolveCommand = require('./util/resolveCommand');
|
||||
|
||||
var isNode10 = process.version.indexOf('v0.10.') === 0;
|
||||
|
||||
function notFoundError(command, syscall) {
|
||||
var err;
|
||||
|
||||
err = new Error(syscall + ' ' + command + ' ENOENT');
|
||||
err.code = err.errno = 'ENOENT';
|
||||
err.syscall = syscall + ' ' + command;
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
function hookChildProcess(cp, parsed) {
|
||||
var originalEmit;
|
||||
|
||||
if (!isWin) {
|
||||
return;
|
||||
}
|
||||
|
||||
originalEmit = cp.emit;
|
||||
cp.emit = function (name, arg1) {
|
||||
var err;
|
||||
|
||||
// If emitting "exit" event and exit code is 1, we need to check if
|
||||
// the command exists and emit an "error" instead
|
||||
// See: https://github.com/IndigoUnited/node-cross-spawn/issues/16
|
||||
if (name === 'exit') {
|
||||
err = verifyENOENT(arg1, parsed, 'spawn');
|
||||
|
||||
if (err) {
|
||||
return originalEmit.call(cp, 'error', err);
|
||||
}
|
||||
}
|
||||
|
||||
return originalEmit.apply(cp, arguments);
|
||||
};
|
||||
}
|
||||
|
||||
function verifyENOENT(status, parsed) {
|
||||
if (isWin && status === 1 && !parsed.file) {
|
||||
return notFoundError(parsed.original, 'spawn');
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
function verifyENOENTSync(status, parsed) {
|
||||
if (isWin && status === 1 && !parsed.file) {
|
||||
return notFoundError(parsed.original, 'spawnSync');
|
||||
}
|
||||
|
||||
// If we are in node 10, then we are using spawn-sync; if it exited
|
||||
// with -1 it probably means that the command does not exist
|
||||
if (isNode10 && status === -1) {
|
||||
parsed.file = isWin ? parsed.file : resolveCommand(parsed.original);
|
||||
|
||||
if (!parsed.file) {
|
||||
return notFoundError(parsed.original, 'spawnSync');
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
module.exports.hookChildProcess = hookChildProcess;
|
||||
module.exports.verifyENOENT = verifyENOENT;
|
||||
module.exports.verifyENOENTSync = verifyENOENTSync;
|
||||
module.exports.notFoundError = notFoundError;
|
||||
113
node_modules/execa/node_modules/cross-spawn/lib/parse.js
generated
vendored
113
node_modules/execa/node_modules/cross-spawn/lib/parse.js
generated
vendored
@@ -1,113 +0,0 @@
|
||||
'use strict';
|
||||
|
||||
var resolveCommand = require('./util/resolveCommand');
|
||||
var hasEmptyArgumentBug = require('./util/hasEmptyArgumentBug');
|
||||
var escapeArgument = require('./util/escapeArgument');
|
||||
var escapeCommand = require('./util/escapeCommand');
|
||||
var readShebang = require('./util/readShebang');
|
||||
|
||||
var isWin = process.platform === 'win32';
|
||||
var skipShellRegExp = /\.(?:com|exe)$/i;
|
||||
|
||||
// Supported in Node >= 6 and >= 4.8
|
||||
var supportsShellOption = parseInt(process.version.substr(1).split('.')[0], 10) >= 6 ||
|
||||
parseInt(process.version.substr(1).split('.')[0], 10) === 4 && parseInt(process.version.substr(1).split('.')[1], 10) >= 8;
|
||||
|
||||
function parseNonShell(parsed) {
|
||||
var shebang;
|
||||
var needsShell;
|
||||
var applyQuotes;
|
||||
|
||||
if (!isWin) {
|
||||
return parsed;
|
||||
}
|
||||
|
||||
// Detect & add support for shebangs
|
||||
parsed.file = resolveCommand(parsed.command);
|
||||
parsed.file = parsed.file || resolveCommand(parsed.command, true);
|
||||
shebang = parsed.file && readShebang(parsed.file);
|
||||
|
||||
if (shebang) {
|
||||
parsed.args.unshift(parsed.file);
|
||||
parsed.command = shebang;
|
||||
needsShell = hasEmptyArgumentBug || !skipShellRegExp.test(resolveCommand(shebang) || resolveCommand(shebang, true));
|
||||
} else {
|
||||
needsShell = hasEmptyArgumentBug || !skipShellRegExp.test(parsed.file);
|
||||
}
|
||||
|
||||
// If a shell is required, use cmd.exe and take care of escaping everything correctly
|
||||
if (needsShell) {
|
||||
// Escape command & arguments
|
||||
applyQuotes = (parsed.command !== 'echo'); // Do not quote arguments for the special "echo" command
|
||||
parsed.command = escapeCommand(parsed.command);
|
||||
parsed.args = parsed.args.map(function (arg) {
|
||||
return escapeArgument(arg, applyQuotes);
|
||||
});
|
||||
|
||||
// Make use of cmd.exe
|
||||
parsed.args = ['/d', '/s', '/c', '"' + parsed.command + (parsed.args.length ? ' ' + parsed.args.join(' ') : '') + '"'];
|
||||
parsed.command = process.env.comspec || 'cmd.exe';
|
||||
parsed.options.windowsVerbatimArguments = true; // Tell node's spawn that the arguments are already escaped
|
||||
}
|
||||
|
||||
return parsed;
|
||||
}
|
||||
|
||||
function parseShell(parsed) {
|
||||
var shellCommand;
|
||||
|
||||
// If node supports the shell option, there's no need to mimic its behavior
|
||||
if (supportsShellOption) {
|
||||
return parsed;
|
||||
}
|
||||
|
||||
// Mimic node shell option, see: https://github.com/nodejs/node/blob/b9f6a2dc059a1062776133f3d4fd848c4da7d150/lib/child_process.js#L335
|
||||
shellCommand = [parsed.command].concat(parsed.args).join(' ');
|
||||
|
||||
if (isWin) {
|
||||
parsed.command = typeof parsed.options.shell === 'string' ? parsed.options.shell : process.env.comspec || 'cmd.exe';
|
||||
parsed.args = ['/d', '/s', '/c', '"' + shellCommand + '"'];
|
||||
parsed.options.windowsVerbatimArguments = true; // Tell node's spawn that the arguments are already escaped
|
||||
} else {
|
||||
if (typeof parsed.options.shell === 'string') {
|
||||
parsed.command = parsed.options.shell;
|
||||
} else if (process.platform === 'android') {
|
||||
parsed.command = '/system/bin/sh';
|
||||
} else {
|
||||
parsed.command = '/bin/sh';
|
||||
}
|
||||
|
||||
parsed.args = ['-c', shellCommand];
|
||||
}
|
||||
|
||||
return parsed;
|
||||
}
|
||||
|
||||
// ------------------------------------------------
|
||||
|
||||
function parse(command, args, options) {
|
||||
var parsed;
|
||||
|
||||
// Normalize arguments, similar to nodejs
|
||||
if (args && !Array.isArray(args)) {
|
||||
options = args;
|
||||
args = null;
|
||||
}
|
||||
|
||||
args = args ? args.slice(0) : []; // Clone array to avoid changing the original
|
||||
options = options || {};
|
||||
|
||||
// Build our parsed object
|
||||
parsed = {
|
||||
command: command,
|
||||
args: args,
|
||||
options: options,
|
||||
file: undefined,
|
||||
original: command,
|
||||
};
|
||||
|
||||
// Delegate further parsing to shell or non-shell
|
||||
return options.shell ? parseShell(parsed) : parseNonShell(parsed);
|
||||
}
|
||||
|
||||
module.exports = parse;
|
||||
30
node_modules/execa/node_modules/cross-spawn/lib/util/escapeArgument.js
generated
vendored
30
node_modules/execa/node_modules/cross-spawn/lib/util/escapeArgument.js
generated
vendored
@@ -1,30 +0,0 @@
|
||||
'use strict';
|
||||
|
||||
function escapeArgument(arg, quote) {
|
||||
// Convert to string
|
||||
arg = '' + arg;
|
||||
|
||||
// If we are not going to quote the argument,
|
||||
// escape shell metacharacters, including double and single quotes:
|
||||
if (!quote) {
|
||||
arg = arg.replace(/([()%!^<>&|;,"'\s])/g, '^$1');
|
||||
} else {
|
||||
// Sequence of backslashes followed by a double quote:
|
||||
// double up all the backslashes and escape the double quote
|
||||
arg = arg.replace(/(\\*)"/g, '$1$1\\"');
|
||||
|
||||
// Sequence of backslashes followed by the end of the string
|
||||
// (which will become a double quote later):
|
||||
// double up all the backslashes
|
||||
arg = arg.replace(/(\\*)$/, '$1$1');
|
||||
|
||||
// All other backslashes occur literally
|
||||
|
||||
// Quote the whole thing:
|
||||
arg = '"' + arg + '"';
|
||||
}
|
||||
|
||||
return arg;
|
||||
}
|
||||
|
||||
module.exports = escapeArgument;
|
||||
12
node_modules/execa/node_modules/cross-spawn/lib/util/escapeCommand.js
generated
vendored
12
node_modules/execa/node_modules/cross-spawn/lib/util/escapeCommand.js
generated
vendored
@@ -1,12 +0,0 @@
|
||||
'use strict';
|
||||
|
||||
var escapeArgument = require('./escapeArgument');
|
||||
|
||||
function escapeCommand(command) {
|
||||
// Do not escape if this command is not dangerous..
|
||||
// We do this so that commands like "echo" or "ifconfig" work
|
||||
// Quoting them, will make them unaccessible
|
||||
return /^[a-z0-9_-]+$/i.test(command) ? command : escapeArgument(command, true);
|
||||
}
|
||||
|
||||
module.exports = escapeCommand;
|
||||
18
node_modules/execa/node_modules/cross-spawn/lib/util/hasEmptyArgumentBug.js
generated
vendored
18
node_modules/execa/node_modules/cross-spawn/lib/util/hasEmptyArgumentBug.js
generated
vendored
@@ -1,18 +0,0 @@
|
||||
'use strict';
|
||||
|
||||
// See: https://github.com/IndigoUnited/node-cross-spawn/pull/34#issuecomment-221623455
|
||||
function hasEmptyArgumentBug() {
|
||||
var nodeVer;
|
||||
|
||||
if (process.platform !== 'win32') {
|
||||
return false;
|
||||
}
|
||||
|
||||
nodeVer = process.version.substr(1).split('.').map(function (num) {
|
||||
return parseInt(num, 10);
|
||||
});
|
||||
|
||||
return (nodeVer[0] === 0 && nodeVer[1] < 12);
|
||||
}
|
||||
|
||||
module.exports = hasEmptyArgumentBug();
|
||||
37
node_modules/execa/node_modules/cross-spawn/lib/util/readShebang.js
generated
vendored
37
node_modules/execa/node_modules/cross-spawn/lib/util/readShebang.js
generated
vendored
@@ -1,37 +0,0 @@
|
||||
'use strict';
|
||||
|
||||
var fs = require('fs');
|
||||
var LRU = require('lru-cache');
|
||||
var shebangCommand = require('shebang-command');
|
||||
|
||||
var shebangCache = new LRU({ max: 50, maxAge: 30 * 1000 }); // Cache just for 30sec
|
||||
|
||||
function readShebang(command) {
|
||||
var buffer;
|
||||
var fd;
|
||||
var shebang;
|
||||
|
||||
// Check if it is in the cache first
|
||||
if (shebangCache.has(command)) {
|
||||
return shebangCache.get(command);
|
||||
}
|
||||
|
||||
// Read the first 150 bytes from the file
|
||||
buffer = new Buffer(150);
|
||||
|
||||
try {
|
||||
fd = fs.openSync(command, 'r');
|
||||
fs.readSync(fd, buffer, 0, 150, 0);
|
||||
fs.closeSync(fd);
|
||||
} catch (e) { /* empty */ }
|
||||
|
||||
// Attempt to extract shebang (null is returned if not a shebang)
|
||||
shebang = shebangCommand(buffer.toString());
|
||||
|
||||
// Store the shebang in the cache
|
||||
shebangCache.set(command, shebang);
|
||||
|
||||
return shebang;
|
||||
}
|
||||
|
||||
module.exports = readShebang;
|
||||
31
node_modules/execa/node_modules/cross-spawn/lib/util/resolveCommand.js
generated
vendored
31
node_modules/execa/node_modules/cross-spawn/lib/util/resolveCommand.js
generated
vendored
@@ -1,31 +0,0 @@
|
||||
'use strict';
|
||||
|
||||
var path = require('path');
|
||||
var which = require('which');
|
||||
var LRU = require('lru-cache');
|
||||
|
||||
var commandCache = new LRU({ max: 50, maxAge: 30 * 1000 }); // Cache just for 30sec
|
||||
|
||||
function resolveCommand(command, noExtension) {
|
||||
var resolved;
|
||||
|
||||
noExtension = !!noExtension;
|
||||
resolved = commandCache.get(command + '!' + noExtension);
|
||||
|
||||
// Check if its resolved in the cache
|
||||
if (commandCache.has(command)) {
|
||||
return commandCache.get(command);
|
||||
}
|
||||
|
||||
try {
|
||||
resolved = !noExtension ?
|
||||
which.sync(command) :
|
||||
which.sync(command, { pathExt: path.delimiter + (process.env.PATHEXT || '') });
|
||||
} catch (e) { /* empty */ }
|
||||
|
||||
commandCache.set(command + '!' + noExtension, resolved);
|
||||
|
||||
return resolved;
|
||||
}
|
||||
|
||||
module.exports = resolveCommand;
|
||||
83
node_modules/execa/node_modules/cross-spawn/package.json
generated
vendored
83
node_modules/execa/node_modules/cross-spawn/package.json
generated
vendored
@@ -1,83 +0,0 @@
|
||||
{
|
||||
"_from": "cross-spawn@^5.0.1",
|
||||
"_id": "cross-spawn@5.1.0",
|
||||
"_inBundle": false,
|
||||
"_integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
|
||||
"_location": "/execa/cross-spawn",
|
||||
"_phantomChildren": {},
|
||||
"_requested": {
|
||||
"type": "range",
|
||||
"registry": true,
|
||||
"raw": "cross-spawn@^5.0.1",
|
||||
"name": "cross-spawn",
|
||||
"escapedName": "cross-spawn",
|
||||
"rawSpec": "^5.0.1",
|
||||
"saveSpec": null,
|
||||
"fetchSpec": "^5.0.1"
|
||||
},
|
||||
"_requiredBy": [
|
||||
"/execa"
|
||||
],
|
||||
"_resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
|
||||
"_shasum": "e8bd0efee58fcff6f8f94510a0a554bbfa235449",
|
||||
"_spec": "cross-spawn@^5.0.1",
|
||||
"_where": "C:\\xampp\\htdocs\\w4rpservices\\node_modules\\execa",
|
||||
"author": {
|
||||
"name": "IndigoUnited",
|
||||
"email": "hello@indigounited.com",
|
||||
"url": "http://indigounited.com"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/IndigoUnited/node-cross-spawn/issues/"
|
||||
},
|
||||
"bundleDependencies": false,
|
||||
"dependencies": {
|
||||
"lru-cache": "^4.0.1",
|
||||
"shebang-command": "^1.2.0",
|
||||
"which": "^1.2.9"
|
||||
},
|
||||
"deprecated": false,
|
||||
"description": "Cross platform child_process#spawn and child_process#spawnSync",
|
||||
"devDependencies": {
|
||||
"@satazor/eslint-config": "^3.0.0",
|
||||
"eslint": "^3.0.0",
|
||||
"expect.js": "^0.3.0",
|
||||
"glob": "^7.0.0",
|
||||
"mkdirp": "^0.5.1",
|
||||
"mocha": "^3.0.2",
|
||||
"once": "^1.4.0",
|
||||
"rimraf": "^2.5.0"
|
||||
},
|
||||
"files": [
|
||||
"index.js",
|
||||
"lib"
|
||||
],
|
||||
"homepage": "https://github.com/IndigoUnited/node-cross-spawn#readme",
|
||||
"keywords": [
|
||||
"spawn",
|
||||
"spawnSync",
|
||||
"windows",
|
||||
"cross",
|
||||
"platform",
|
||||
"path",
|
||||
"ext",
|
||||
"path-ext",
|
||||
"path_ext",
|
||||
"shebang",
|
||||
"hashbang",
|
||||
"cmd",
|
||||
"execute"
|
||||
],
|
||||
"license": "MIT",
|
||||
"main": "index.js",
|
||||
"name": "cross-spawn",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/IndigoUnited/node-cross-spawn.git"
|
||||
},
|
||||
"scripts": {
|
||||
"lint": "eslint '{*.js,lib/**/*.js,test/**/*.js}'",
|
||||
"test": "node test/prepare && mocha --bail test/test"
|
||||
},
|
||||
"version": "5.1.0"
|
||||
}
|
||||
50
node_modules/execa/package.json
generated
vendored
50
node_modules/execa/package.json
generated
vendored
@@ -1,31 +1,28 @@
|
||||
{
|
||||
"_from": "execa@^0.7.0",
|
||||
"_id": "execa@0.7.0",
|
||||
"_from": "execa@^1.0.0",
|
||||
"_id": "execa@1.0.0",
|
||||
"_inBundle": false,
|
||||
"_integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
|
||||
"_integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
|
||||
"_location": "/execa",
|
||||
"_phantomChildren": {
|
||||
"lru-cache": "4.1.3",
|
||||
"shebang-command": "1.2.0",
|
||||
"which": "1.3.1"
|
||||
},
|
||||
"_phantomChildren": {},
|
||||
"_requested": {
|
||||
"type": "range",
|
||||
"registry": true,
|
||||
"raw": "execa@^0.7.0",
|
||||
"raw": "execa@^1.0.0",
|
||||
"name": "execa",
|
||||
"escapedName": "execa",
|
||||
"rawSpec": "^0.7.0",
|
||||
"rawSpec": "^1.0.0",
|
||||
"saveSpec": null,
|
||||
"fetchSpec": "^0.7.0"
|
||||
"fetchSpec": "^1.0.0"
|
||||
},
|
||||
"_requiredBy": [
|
||||
"/yargs/os-locale"
|
||||
"/default-gateway",
|
||||
"/os-locale"
|
||||
],
|
||||
"_resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
|
||||
"_shasum": "944becd34cc41ee32a63a9faf27ad5a65fc59777",
|
||||
"_spec": "execa@^0.7.0",
|
||||
"_where": "C:\\xampp\\htdocs\\w4rpservices\\node_modules\\yargs\\node_modules\\os-locale",
|
||||
"_resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
|
||||
"_shasum": "c6236a5bb4df6d6f15e88e7f017798216749ddd8",
|
||||
"_spec": "execa@^1.0.0",
|
||||
"_where": "C:\\xampp\\htdocs\\w4rpservices\\node_modules\\os-locale",
|
||||
"author": {
|
||||
"name": "Sindre Sorhus",
|
||||
"email": "sindresorhus@gmail.com",
|
||||
@@ -36,8 +33,8 @@
|
||||
},
|
||||
"bundleDependencies": false,
|
||||
"dependencies": {
|
||||
"cross-spawn": "^5.0.1",
|
||||
"get-stream": "^3.0.0",
|
||||
"cross-spawn": "^6.0.0",
|
||||
"get-stream": "^4.0.0",
|
||||
"is-stream": "^1.1.0",
|
||||
"npm-run-path": "^2.0.0",
|
||||
"p-finally": "^1.0.0",
|
||||
@@ -49,15 +46,15 @@
|
||||
"devDependencies": {
|
||||
"ava": "*",
|
||||
"cat-names": "^1.0.2",
|
||||
"coveralls": "^2.11.9",
|
||||
"delay": "^2.0.0",
|
||||
"coveralls": "^3.0.1",
|
||||
"delay": "^3.0.0",
|
||||
"is-running": "^2.0.0",
|
||||
"nyc": "^11.0.2",
|
||||
"nyc": "^13.0.1",
|
||||
"tempfile": "^2.0.0",
|
||||
"xo": "*"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=4"
|
||||
"node": ">=6"
|
||||
},
|
||||
"files": [
|
||||
"index.js",
|
||||
@@ -82,13 +79,6 @@
|
||||
"local"
|
||||
],
|
||||
"license": "MIT",
|
||||
"maintainers": [
|
||||
{
|
||||
"name": "James Talmage",
|
||||
"email": "james@talmage.io",
|
||||
"url": "github.com/jamestalmage"
|
||||
}
|
||||
],
|
||||
"name": "execa",
|
||||
"nyc": {
|
||||
"reporter": [
|
||||
@@ -108,5 +98,5 @@
|
||||
"scripts": {
|
||||
"test": "xo && nyc ava"
|
||||
},
|
||||
"version": "0.7.0"
|
||||
"version": "1.0.0"
|
||||
}
|
||||
|
||||
76
node_modules/execa/readme.md
generated
vendored
76
node_modules/execa/readme.md
generated
vendored
@@ -17,35 +17,69 @@
|
||||
## Install
|
||||
|
||||
```
|
||||
$ npm install --save execa
|
||||
$ npm install execa
|
||||
```
|
||||
|
||||
<a href="https://www.patreon.com/sindresorhus">
|
||||
<img src="https://c5.patreon.com/external/logo/become_a_patron_button@2x.png" width="160">
|
||||
</a>
|
||||
|
||||
|
||||
## Usage
|
||||
|
||||
```js
|
||||
const execa = require('execa');
|
||||
|
||||
execa('echo', ['unicorns']).then(result => {
|
||||
console.log(result.stdout);
|
||||
(async () => {
|
||||
const {stdout} = await execa('echo', ['unicorns']);
|
||||
console.log(stdout);
|
||||
//=> 'unicorns'
|
||||
});
|
||||
})();
|
||||
```
|
||||
|
||||
// pipe the child process stdout to the current stdout
|
||||
execa('echo', ['unicorns']).stdout.pipe(process.stdout);
|
||||
Additional examples:
|
||||
|
||||
execa.shell('echo unicorns').then(result => {
|
||||
console.log(result.stdout);
|
||||
```js
|
||||
const execa = require('execa');
|
||||
|
||||
(async () => {
|
||||
// Pipe the child process stdout to the current stdout
|
||||
execa('echo', ['unicorns']).stdout.pipe(process.stdout);
|
||||
|
||||
|
||||
// Run a shell command
|
||||
const {stdout} = await execa.shell('echo unicorns');
|
||||
//=> 'unicorns'
|
||||
});
|
||||
|
||||
// example of catching an error
|
||||
execa.shell('exit 3').catch(error => {
|
||||
|
||||
// Catching an error
|
||||
try {
|
||||
await execa.shell('exit 3');
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
/*
|
||||
{
|
||||
message: 'Command failed: /bin/sh -c exit 3'
|
||||
killed: false,
|
||||
code: 3,
|
||||
signal: null,
|
||||
cmd: '/bin/sh -c exit 3',
|
||||
stdout: '',
|
||||
stderr: '',
|
||||
timedOut: false
|
||||
}
|
||||
*/
|
||||
}
|
||||
})();
|
||||
|
||||
// Catching an error with a sync method
|
||||
try {
|
||||
execa.shellSync('exit 3');
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
/*
|
||||
{
|
||||
message: 'Command failed: /bin/sh -c exit 3'
|
||||
killed: false,
|
||||
code: 3,
|
||||
signal: null,
|
||||
cmd: '/bin/sh -c exit 3',
|
||||
@@ -54,7 +88,7 @@ execa.shell('exit 3').catch(error => {
|
||||
timedOut: false
|
||||
}
|
||||
*/
|
||||
});
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
@@ -131,7 +165,7 @@ Explicitly set the value of `argv[0]` sent to the child process. This will be se
|
||||
|
||||
#### stdio
|
||||
|
||||
Type: `Array` `string`<br>
|
||||
Type: `string[]` `string`<br>
|
||||
Default: `pipe`
|
||||
|
||||
Child's [stdio](https://nodejs.org/api/child_process.html#child_process_options_stdio) configuration.
|
||||
@@ -218,6 +252,13 @@ Default: `0`
|
||||
|
||||
If timeout is greater than `0`, the parent will send the signal identified by the `killSignal` property (the default is `SIGTERM`) if the child runs longer than timeout milliseconds.
|
||||
|
||||
#### buffer
|
||||
|
||||
Type: `boolean`<br>
|
||||
Default: `true`
|
||||
|
||||
Buffer the output from the spawned process. When buffering is disabled you must consume the output of the `stdout` and `stderr` streams because the promise will not be resolved/rejected until they have completed.
|
||||
|
||||
#### maxBuffer
|
||||
|
||||
Type: `number`<br>
|
||||
@@ -253,6 +294,13 @@ Default: `pipe`
|
||||
|
||||
Same options as [`stdio`](https://nodejs.org/dist/latest-v6.x/docs/api/child_process.html#child_process_options_stdio).
|
||||
|
||||
#### windowsVerbatimArguments
|
||||
|
||||
Type: `boolean`<br>
|
||||
Default: `false`
|
||||
|
||||
If `true`, no quoting or escaping of arguments is done on Windows. Ignored on other platforms. This is set to `true` automatically when the `shell` option is `true`.
|
||||
|
||||
|
||||
## Tips
|
||||
|
||||
|
||||
Reference in New Issue
Block a user