teen_process 1.14.1 → 1.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -2
- package/build/lib/exec.js +53 -29
- package/build/lib/helpers.js +35 -0
- package/build/lib/subprocess.js +40 -26
- package/lib/exec.js +46 -27
- package/lib/helpers.js +32 -0
- package/lib/subprocess.js +38 -21
- package/package.json +5 -14
package/README.md
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
node-teen_process
|
|
2
2
|
=================
|
|
3
3
|
|
|
4
|
-
[](https://greenkeeper.io/)
|
|
5
|
-
|
|
6
4
|
A grown-up version of Node's child_process. `exec` is really useful, but it
|
|
7
5
|
suffers many limitations. This is an es7 (`async`/`await`) implementation of
|
|
8
6
|
`exec` that uses `spawn` under the hood. It takes care of wrapping commands and
|
|
@@ -50,6 +48,9 @@ The `exec` function takes some options, with these defaults:
|
|
|
50
48
|
stdio: "inherit",
|
|
51
49
|
isBuffer: false,
|
|
52
50
|
shell: undefined,
|
|
51
|
+
logger: undefined,
|
|
52
|
+
maxStdoutBufferSize: 100 * 1024 * 1024, // 100 MB
|
|
53
|
+
maxStderrBufferSize: 100 * 1024 * 1024, // 100 MB
|
|
53
54
|
}
|
|
54
55
|
```
|
|
55
56
|
|
|
@@ -57,6 +58,9 @@ Most of these are self-explanatory. `ignoreOutput` is useful if you have a very
|
|
|
57
58
|
chatty process whose output you don't care about and don't want to add it to
|
|
58
59
|
the memory consumed by your program.
|
|
59
60
|
|
|
61
|
+
Both buffer size limits are needed to avoid memory overflow while collecting
|
|
62
|
+
process output. If the overall size of output chunks for different stream types exceeds the the given one then the oldest chunks will be pulled out in order to keep the memory load within the acceptable ranges.
|
|
63
|
+
|
|
60
64
|
If you're on Windows, you'll want to pass `shell: true`, because `exec`
|
|
61
65
|
actually uses `spawn` under the hood, and is therefore subject to the issues
|
|
62
66
|
noted about Windows + `spawn` in [the Node
|
|
@@ -84,6 +88,10 @@ let {stdout, stderr} = await exec('cat', [filename], {isBuffer: true});
|
|
|
84
88
|
Buffer.isBuffer(stdout); // true
|
|
85
89
|
```
|
|
86
90
|
|
|
91
|
+
The `logger` option allows stdout and stderr to be sent to a particular logger,
|
|
92
|
+
as it it received. This is overridden by the `ignoreOutput` option.
|
|
93
|
+
|
|
94
|
+
|
|
87
95
|
## teen_process.SubProcess
|
|
88
96
|
|
|
89
97
|
`spawn` is already pretty great but for some uses there's a fair amount of
|
package/build/lib/exec.js
CHANGED
|
@@ -16,7 +16,13 @@ var _shellQuote = require("shell-quote");
|
|
|
16
16
|
|
|
17
17
|
var _bluebird = _interopRequireDefault(require("bluebird"));
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
var _lodash = _interopRequireDefault(require("lodash"));
|
|
20
|
+
|
|
21
|
+
var _helpers = require("./helpers");
|
|
22
|
+
|
|
23
|
+
const MAX_BUFFER_SIZE = 100 * 1024 * 1024;
|
|
24
|
+
|
|
25
|
+
async function exec(cmd, args = [], opts = {}) {
|
|
20
26
|
const rep = (0, _shellQuote.quote)([cmd, ...args]);
|
|
21
27
|
opts = Object.assign({
|
|
22
28
|
timeout: null,
|
|
@@ -25,11 +31,14 @@ function exec(cmd, args = [], opts = {}) {
|
|
|
25
31
|
cwd: undefined,
|
|
26
32
|
env: process.env,
|
|
27
33
|
ignoreOutput: false,
|
|
28
|
-
stdio:
|
|
34
|
+
stdio: 'inherit',
|
|
29
35
|
isBuffer: false,
|
|
30
|
-
shell: undefined
|
|
36
|
+
shell: undefined,
|
|
37
|
+
logger: undefined,
|
|
38
|
+
maxStdoutBufferSize: MAX_BUFFER_SIZE,
|
|
39
|
+
maxStderrBufferSize: MAX_BUFFER_SIZE
|
|
31
40
|
}, opts);
|
|
32
|
-
return new _bluebird.default((resolve, reject) => {
|
|
41
|
+
return await new _bluebird.default((resolve, reject) => {
|
|
33
42
|
let proc = (0, _child_process.spawn)(cmd, args, {
|
|
34
43
|
cwd: opts.cwd,
|
|
35
44
|
env: opts.env,
|
|
@@ -39,13 +48,11 @@ function exec(cmd, args = [], opts = {}) {
|
|
|
39
48
|
stderrArr = [],
|
|
40
49
|
timer = null;
|
|
41
50
|
proc.on('error', err => {
|
|
42
|
-
let msg = `Command '${rep}' errored out: ${err.stack}`;
|
|
43
|
-
|
|
44
51
|
if (err.errno === 'ENOENT') {
|
|
45
|
-
|
|
52
|
+
err = (0, _helpers.formatEnoent)(err, cmd, opts.cwd);
|
|
46
53
|
}
|
|
47
54
|
|
|
48
|
-
reject(
|
|
55
|
+
reject(err);
|
|
49
56
|
});
|
|
50
57
|
|
|
51
58
|
if (proc.stdin) {
|
|
@@ -54,31 +61,48 @@ function exec(cmd, args = [], opts = {}) {
|
|
|
54
61
|
});
|
|
55
62
|
}
|
|
56
63
|
|
|
57
|
-
|
|
58
|
-
proc
|
|
59
|
-
|
|
60
|
-
}
|
|
61
|
-
}
|
|
64
|
+
const handleStream = (streamType, streamProps) => {
|
|
65
|
+
if (!proc[streamType]) {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
62
68
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
reject(new Error(`Standard error '${err.syscall}' error: ${err.stack}`));
|
|
69
|
+
proc[streamType].on('error', err => {
|
|
70
|
+
reject(new Error(`${_lodash.default.capitalize(streamType)} '${err.syscall}' error: ${err.stack}`));
|
|
66
71
|
});
|
|
67
|
-
}
|
|
68
72
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
stdoutArr.push(data);
|
|
73
|
-
});
|
|
73
|
+
if (opts.ignoreOutput) {
|
|
74
|
+
proc[streamType].on('data', () => {});
|
|
75
|
+
return;
|
|
74
76
|
}
|
|
75
77
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
78
|
+
const {
|
|
79
|
+
chunks,
|
|
80
|
+
maxSize
|
|
81
|
+
} = streamProps;
|
|
82
|
+
let size = 0;
|
|
83
|
+
proc[streamType].on('data', chunk => {
|
|
84
|
+
chunks.push(chunk);
|
|
85
|
+
size += chunk.length;
|
|
86
|
+
|
|
87
|
+
while (chunks.length > 1 && size >= maxSize) {
|
|
88
|
+
size -= chunks[0].length;
|
|
89
|
+
chunks.shift();
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
if (opts.logger && _lodash.default.isFunction(opts.logger.debug)) {
|
|
93
|
+
opts.logger.debug(chunk.toString());
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
handleStream('stdout', {
|
|
99
|
+
maxSize: opts.maxStdoutBufferSize,
|
|
100
|
+
chunks: stdoutArr
|
|
101
|
+
});
|
|
102
|
+
handleStream('stderr', {
|
|
103
|
+
maxSize: opts.maxStderrBufferSize,
|
|
104
|
+
chunks: stderrArr
|
|
105
|
+
});
|
|
82
106
|
|
|
83
107
|
function getStdio(isBuffer) {
|
|
84
108
|
let stdout, stderr;
|
|
@@ -147,4 +171,4 @@ var _default = exec;
|
|
|
147
171
|
exports.default = _default;require('source-map-support').install();
|
|
148
172
|
|
|
149
173
|
|
|
150
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9leGVjLmpzIl0sIm5hbWVzIjpbImV4ZWMiLCJjbWQiLCJhcmdzIiwib3B0cyIsInJlcCIsIk9iamVjdCIsImFzc2lnbiIsInRpbWVvdXQiLCJlbmNvZGluZyIsImtpbGxTaWduYWwiLCJjd2QiLCJ1bmRlZmluZWQiLCJlbnYiLCJwcm9jZXNzIiwiaWdub3JlT3V0cHV0Iiwic3RkaW8iLCJpc0J1ZmZlciIsInNoZWxsIiwiQiIsInJlc29sdmUiLCJyZWplY3QiLCJwcm9jIiwic3Rkb3V0QXJyIiwic3RkZXJyQXJyIiwidGltZXIiLCJvbiIsImVyciIsIm1zZyIsInN0YWNrIiwiZXJybm8iLCJFcnJvciIsInN0ZGluIiwic3lzY2FsbCIsInN0ZG91dCIsInN0ZGVyciIsImRhdGEiLCJwdXNoIiwiZ2V0U3RkaW8iLCJCdWZmZXIiLCJjb25jYXQiLCJ0b1N0cmluZyIsImNvZGUiLCJjbGVhclRpbWVvdXQiLCJzZXRUaW1lb3V0Iiwia2lsbCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBR0EsU0FBU0EsSUFBVCxDQUFlQyxHQUFmLEVBQW9CQyxJQUFJLEdBQUcsRUFBM0IsRUFBK0JDLElBQUksR0FBRyxFQUF0QyxFQUEwQztBQUV4QyxRQUFNQyxHQUFHLEdBQUcsdUJBQU0sQ0FBQ0gsR0FBRCxFQUFNLEdBQUdDLElBQVQsQ0FBTixDQUFaO0FBSUFDLEVBQUFBLElBQUksR0FBR0UsTUFBTSxDQUFDQyxNQUFQLENBQWM7QUFDbkJDLElBQUFBLE9BQU8sRUFBRSxJQURVO0FBRW5CQyxJQUFBQSxRQUFRLEVBQUUsTUFGUztBQUduQkMsSUFBQUEsVUFBVSxFQUFFLFNBSE87QUFJbkJDLElBQUFBLEdBQUcsRUFBRUMsU0FKYztBQUtuQkMsSUFBQUEsR0FBRyxFQUFFQyxPQUFPLENBQUNELEdBTE07QUFNbkJFLElBQUFBLFlBQVksRUFBRSxLQU5LO0FBT25CQyxJQUFBQSxLQUFLLEVBQUUsU0FQWTtBQVFuQkMsSUFBQUEsUUFB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Q0FBTjtBQUNEO0FBQ0YsS0FaRDs7QUFpQkEsUUFBSXZCLElBQUksQ0FBQ0ksT0FBVCxFQUFrQjtBQUNoQmlCLE1BQUFBLEtBQUssR0FBR21CLFVBQVUsQ0FBQyxNQUFNO0FBQ3ZCLFlBQUk7QUFBQ1YsVUFBQUEsTUFBRDtBQUFTQyxVQUFBQTtBQUFULFlBQW1CRyxRQUFRLENBQUNsQyxJQUFJLENBQUNhLFFBQU4sQ0FBL0I7QUFDQSxZQUFJVSxHQUFHLEdBQUcsSUFBSUksS0FBSixDQUFXLFlBQVcxQixHQUFJLHFCQUFvQkQsSUFBSSxDQUFDSSxPQUFRLElBQTNELENBQVY7QUFDQW1CLFFBQUFBLEdBQUcsR0FBR3JCLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjb0IsR0FBZCxFQUFtQjtBQUFDTyxVQUFBQSxNQUFEO0FBQVNDLFVBQUFBLE1BQVQ7QUFBaUJPLFVBQUFBLElBQUksRUFBRTtBQUF2QixTQUFuQixDQUFOO0FBQ0FyQixRQUFBQSxNQUFNLENBQUNNLEdBQUQsQ0FBTjtBQUdBTCxRQUFBQSxJQUFJLENBQUN1QixJQUFMLENBQVV6QyxJQUFJLENBQUNNLFVBQWY7QUFDRCxPQVJpQixFQVFmTixJQUFJLENBQUNJLE9BUlUsQ0FBbEI7QUFTRDtBQUNGLEdBdkZNLENBQVA7QUF3RkQ7O2VBR2NQLEkiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBwcm9taXNlL3ByZWZlci1hd2FpdC10by1jYWxsYmFja3MgKi9cblxuaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IHF1b3RlIH0gZnJvbSAnc2hlbGwtcXVvdGUnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuXG5cbmZ1bmN0aW9uIGV4ZWMgKGNtZCwgYXJncyA9IFtdLCBvcHRzID0ge30pIHtcbiAgLy8gZ2V0IGEgcXVvdGVkIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb21tYW5kIGZvciBlcnJvciBzdHJpbmdzXG4gIGNvbnN0IHJlcCA9IHF1b3RlKFtjbWQsIC4uLmFyZ3NdKTtcblxuICAvLyBleHRlbmQgZGVmYXVsdCBvcHRpb25zOyB3ZSdyZSBiYXNpY2FsbHkgcmUtaW1wbGVtZW50aW5nIGV4ZWMncyBvcHRpb25zXG4gIC8vIGZvciB1c2UgaGVyZSB3aXRoIHNwYXduIHVuZGVyIHRoZSBob29kXG4gIG9wdHMgPSBPYmplY3QuYXNzaWduKHtcbiAgICB0aW1lb3V0OiBudWxsLFxuICAgIGVuY29kaW5nOiAndXRmOCcsXG4gICAga2lsbFNpZ25hbDogJ1NJR1RFUk0nLFxuICAgIGN3ZDogdW5kZWZpbmVkLFxuICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgaWdub3JlT3V0cHV0OiBmYWxzZSxcbiAgICBzdGRpbzogXCJpbmhlcml0XCIsXG4gICAgaXNCdWZmZXI6IGZhbHNlLFxuICAgIHNoZWxsOiB1bmRlZmluZWQsXG4gIH0sIG9wdHMpO1xuXG4gIC8vIHRoaXMgaXMgYW4gYXN5bmMgZnVuY3Rpb24sIHNvIHJldHVybiBhIHByb21pc2VcbiAgcmV0dXJuIG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAvLyBzcGF3biB0aGUgY2hpbGQgcHJvY2VzcyB3aXRoIG9wdGlvbnM7IHdlIGRvbid0IGN1cnJlbnRseSBleHBvc2UgYW55IG9mXG4gICAgLy8gdGhlIG90aGVyICdzcGF3bicgb3B0aW9ucyB0aHJvdWdoIHRoZSBBUElcbiAgICBsZXQgcHJvYyA9IHNwYXduKGNtZCwgYXJncywge2N3ZDogb3B0cy5jd2QsIGVudjogb3B0cy5lbnYsIHNoZWxsOiBvcHRzLnNoZWxsfSk7XG4gICAgbGV0IHN0ZG91dEFyciA9IFtdLCBzdGRlcnJBcnIgPSBbXSwgdGltZXIgPSBudWxsO1xuXG4gICAgLy8gaWYgdGhlIHByb2Nlc3MgZXJyb3JzIG91dCwgcmVqZWN0IHRoZSBwcm9taXNlXG4gICAgcHJvYy5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICBsZXQgbXNnID0gYENvbW1hbmQgJyR7cmVwfScgZXJyb3JlZCBvdXQ6ICR7ZXJyLnN0YWNrfWA7XG4gICAgICBpZiAoZXJyLmVycm5vID09PSAnRU5PRU5UJykge1xuICAgICAgICBtc2cgPSBgQ29tbWFuZCAnJHtjbWR9JyBub3QgZm91bmQuIElzIGl0IGluc3RhbGxlZD9gO1xuICAgICAgfVxuICAgICAgcmVqZWN0KG5ldyBFcnJvcihtc2cpKTtcbiAgICB9KTtcbiAgICBpZiAocHJvYy5zdGRpbikge1xuICAgICAgcHJvYy5zdGRpbi5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoYFN0YW5kYXJkIGlucHV0ICcke2Vyci5zeXNjYWxsfScgZXJyb3I6ICR7ZXJyLnN0YWNrfWApKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAocHJvYy5zdGRvdXQpIHtcbiAgICAgIHByb2Muc3Rkb3V0Lm9uKCdlcnJvcicsIChlcnIpID0+IHtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgU3RhbmRhcmQgb3V0cHV0ICcke2Vyci5zeXNjYWxsfScgZXJyb3I6ICR7ZXJyLnN0YWNrfWApKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAocHJvYy5zdGRlcnIpIHtcbiAgICAgIHByb2Muc3RkZXJyLm9uKCdlcnJvcicsIChlcnIpID0+IHtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgU3RhbmRhcmQgZXJyb3IgJyR7ZXJyLnN5c2NhbGx9JyBlcnJvcjogJHtlcnIuc3RhY2t9YCkpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8ga2VlcCB0cmFjayBvZiBzdGRvdXQvc3RkZXJyIGlmIHdlIGhhdmVuJ3Qgc2FpZCBub3QgdG9cbiAgICBpZiAoIW9wdHMuaWdub3JlT3V0cHV0KSB7XG4gICAgICBpZiAocHJvYy5zdGRvdXQpIHtcbiAgICAgICAgcHJvYy5zdGRvdXQub24oJ2RhdGEnLCAoZGF0YSkgPT4ge1xuICAgICAgICAgIHN0ZG91dEFyci5wdXNoKGRhdGEpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9jLnN0ZGVycikge1xuICAgICAgICBwcm9jLnN0ZGVyci5vbignZGF0YScsIChkYXRhKSA9PiB7XG4gICAgICAgICAgc3RkZXJyQXJyLnB1c2goZGF0YSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFN0ZGlvIChpc0J1ZmZlcikge1xuICAgICAgbGV0IHN0ZG91dCwgc3RkZXJyO1xuICAgICAgaWYgKGlzQnVmZmVyKSB7XG4gICAgICAgIHN0ZG91dCA9IEJ1ZmZlci5jb25jYXQoc3Rkb3V0QXJyKTtcbiAgICAgICAgc3RkZXJyID0gQnVmZmVyLmNvbmNhdChzdGRlcnJBcnIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3Rkb3V0ID0gQnVmZmVyLmNvbmNhdChzdGRvdXRBcnIpLnRvU3RyaW5nKG9wdHMuZW5jb2RpbmcpO1xuICAgICAgICBzdGRlcnIgPSBCdWZmZXIuY29uY2F0KHN0ZGVyckFycikudG9TdHJpbmcob3B0cy5lbmNvZGluZyk7XG4gICAgICB9XG4gICAgICByZXR1cm4ge3N0ZG91dCwgc3RkZXJyfTtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgcHJvY2VzcyBlbmRzLCBlaXRoZXIgcmVzb2x2ZSBvciByZWplY3QgdGhlIHByb21pc2UgYmFzZWQgb24gdGhlXG4gICAgLy8gZXhpdCBjb2RlIG9mIHRoZSBwcm9jZXNzLiBlaXRoZXIgd2F5LCBhdHRhY2ggc3Rkb3V0LCBzdGRlcnIsIGFuZCBjb2RlLlxuICAgIC8vIEFsc28gY2xlYW4gdXAgdGhlIHRpbWVyIGlmIGl0IGV4aXN0c1xuICAgIHByb2Mub24oJ2Nsb3NlJywgKGNvZGUpID0+IHtcbiAgICAgIGlmICh0aW1lcikge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgfVxuICAgICAgbGV0IHtzdGRvdXQsIHN0ZGVycn0gPSBnZXRTdGRpbyhvcHRzLmlzQnVmZmVyKTtcbiAgICAgIGlmIChjb2RlID09PSAwKSB7XG4gICAgICAgIHJlc29sdmUoe3N0ZG91dCwgc3RkZXJyLCBjb2RlfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgZXJyID0gbmV3IEVycm9yKGBDb21tYW5kICcke3JlcH0nIGV4aXRlZCB3aXRoIGNvZGUgJHtjb2RlfWApO1xuICAgICAgICBlcnIgPSBPYmplY3QuYXNzaWduKGVyciwge3N0ZG91dCwgc3RkZXJyLCBjb2RlfSk7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gaWYgd2Ugc2V0IGEgdGltZW91dCBvbiB0aGUgY2hpbGQgcHJvY2VzcywgY3V0IGludG8gdGhlIGV4ZWN1dGlvbiBhbmRcbiAgICAvLyByZWplY3QgaWYgdGhlIHRpbWVvdXQgaXMgcmVhY2hlZC4gQXR0YWNoIHRoZSBzdGRvdXQvc3RkZXJyIHdlIGN1cnJlbnRseVxuICAgIC8vIGhhdmUgaW4gY2FzZSBpdCdzIGhlbHBmdWwgaW4gZGVidWdnaW5nXG4gICAgaWYgKG9wdHMudGltZW91dCkge1xuICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgbGV0IHtzdGRvdXQsIHN0ZGVycn0gPSBnZXRTdGRpbyhvcHRzLmlzQnVmZmVyKTtcbiAgICAgICAgbGV0IGVyciA9IG5ldyBFcnJvcihgQ29tbWFuZCAnJHtyZXB9JyB0aW1lZCBvdXQgYWZ0ZXIgJHtvcHRzLnRpbWVvdXR9bXNgKTtcbiAgICAgICAgZXJyID0gT2JqZWN0LmFzc2lnbihlcnIsIHtzdGRvdXQsIHN0ZGVyciwgY29kZTogbnVsbH0pO1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgLy8gcmVqZWN0IGFuZCBUSEVOIGtpbGwgdG8gYXZvaWQgcmFjZSBjb25kaXRpb25zIHdpdGggdGhlIGhhbmRsZXJzXG4gICAgICAgIC8vIGFib3ZlXG4gICAgICAgIHByb2Mua2lsbChvcHRzLmtpbGxTaWduYWwpO1xuICAgICAgfSwgb3B0cy50aW1lb3V0KTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgeyBleGVjIH07XG5leHBvcnQgZGVmYXVsdCBleGVjO1xuIl0sImZpbGUiOiJsaWIvZXhlYy5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9
|
|
174
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9leGVjLmpzIl0sIm5hbWVzIjpbIk1BWF9CVUZGRVJfU0laRSIsImV4ZWMiLCJjbWQiLCJhcmdzIiwib3B0cyIsInJlcCIsIk9iamVjdCIsImFzc2lnbiIsInRpbWVvdXQiLCJlbmNvZGluZyIsImtpbGxTaWduYWwiLCJjd2QiLCJ1bmRlZmluZWQiLCJlbnYiLCJwcm9jZXNzIiwiaWdub3JlT3V0cHV0Iiwic3RkaW8iLCJpc0J1ZmZlciIsInNoZWxsIiwibG9nZ2VyIiwibWF4U3Rkb3V0QnVmZmVyU2l6ZSIsIm1heFN0ZGVyckJ1ZmZlclNpemUiLCJCIiwicmVzb2x2ZSIsInJlamVjdCIsInByb2MiLCJzdGRvdXRBcnIiLCJzdGRlcnJBcnIiLCJ0aW1lciIsIm9uIiwiZXJyIiwiZXJybm8iLCJzdGRpbiIsIkVycm9yIiwic3lzY2FsbCIsInN0YWNrIiwiaGFuZGxlU3RyZWFtIiwic3RyZWFtVHlwZSIsInN0cmVhbVByb3BzIiwiXyIsImNhcGl0YWxpemUiLCJjaHVua3MiLCJtYXhTaXplIiwic2l6ZSIsImNodW5rIiwicHVzaCIsImxlbmd0aCIsInNoaWZ0IiwiaXNGdW5jdGlvbiIsImRlYnVnIiwidG9TdHJpbmciLCJnZXRTdGRpbyIsInN0ZG91dCIsInN0ZGVyciIsIkJ1ZmZlciIsImNvbmNhdCIsImNvZGUiLCJjbGVhclRpbWVvdXQiLCJzZXRUaW1lb3V0Iiwia2lsbCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsZUFBZSxHQUFHLE1BQU0sSUFBTixHQUFhLElBQXJDOztBQUVBLGVBQWVDLElBQWYsQ0FBcUJDLEdBQXJCLEVBQTBCQyxJQUFJLEdBQUcsRUFBakMsRUFBcUNDLElBQUksR0FBRyxFQUE1QyxFQUFnRDtBQUU5QyxRQUFNQyxHQUFHLEdBQUcsdUJBQU0sQ0FBQ0gsR0FBRCxFQUFNLEdBQUdDLElBQVQsQ0FBTixDQUFaO0FBSUFDLEVBQUFBLElBQUksR0FBR0Us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QUFBQ04sVUFBQUEsTUFBRDtBQUFTQyxVQUFBQTtBQUFULFlBQW1CRixRQUFRLENBQUMvQyxJQUFJLENBQUNhLFFBQU4sQ0FBL0I7QUFDQSxZQUFJYSxHQUFHLEdBQUcsSUFBSUcsS0FBSixDQUFXLFlBQVc1QixHQUFJLHFCQUFvQkQsSUFBSSxDQUFDSSxPQUFRLElBQTNELENBQVY7QUFDQXNCLFFBQUFBLEdBQUcsR0FBR3hCLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjdUIsR0FBZCxFQUFtQjtBQUFDc0IsVUFBQUEsTUFBRDtBQUFTQyxVQUFBQSxNQUFUO0FBQWlCRyxVQUFBQSxJQUFJLEVBQUU7QUFBdkIsU0FBbkIsQ0FBTjtBQUNBaEMsUUFBQUEsTUFBTSxDQUFDTSxHQUFELENBQU47QUFHQUwsUUFBQUEsSUFBSSxDQUFDa0MsSUFBTCxDQUFVdkQsSUFBSSxDQUFDTSxVQUFmO0FBQ0QsT0FSaUIsRUFRZk4sSUFBSSxDQUFDSSxPQVJVLENBQWxCO0FBU0Q7QUFDRixHQXBHWSxDQUFiO0FBcUdEOztlQUdjUCxJIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgcHJvbWlzZS9wcmVmZXItYXdhaXQtdG8tY2FsbGJhY2tzICovXG5cbmltcG9ydCB7IHNwYXduIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgeyBxdW90ZSB9IGZyb20gJ3NoZWxsLXF1b3RlJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBmb3JtYXRFbm9lbnQgfSBmcm9tICcuL2hlbHBlcnMnO1xuXG5jb25zdCBNQVhfQlVGRkVSX1NJWkUgPSAxMDAgKiAxMDI0ICogMTAyNDtcblxuYXN5bmMgZnVuY3Rpb24gZXhlYyAoY21kLCBhcmdzID0gW10sIG9wdHMgPSB7fSkge1xuICAvLyBnZXQgYSBxdW90ZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbW1hbmQgZm9yIGVycm9yIHN0cmluZ3NcbiAgY29uc3QgcmVwID0gcXVvdGUoW2NtZCwgLi4uYXJnc10pO1xuXG4gIC8vIGV4dGVuZCBkZWZhdWx0IG9wdGlvbnM7IHdlJ3JlIGJhc2ljYWxseSByZS1pbXBsZW1lbnRpbmcgZXhlYydzIG9wdGlvbnNcbiAgLy8gZm9yIHVzZSBoZXJlIHdpdGggc3Bhd24gdW5kZXIgdGhlIGhvb2RcbiAgb3B0cyA9IE9iamVjdC5hc3NpZ24oe1xuICAgIHRpbWVvdXQ6IG51bGwsXG4gICAgZW5jb2Rpbmc6ICd1dGY4JyxcbiAgICBraWxsU2lnbmFsOiAnU0lHVEVSTScsXG4gICAgY3dkOiB1bmRlZmluZWQsXG4gICAgZW52OiBwcm9jZXNzLmVudixcbiAgICBpZ25vcmVPdXRwdXQ6IGZhbHNlLFxuICAgIHN0ZGlvOiAnaW5oZXJpdCcsXG4gICAgaXNCdWZmZXI6IGZhbHNlLFxuICAgIHNoZWxsOiB1bmRlZmluZWQsXG4gICAgbG9nZ2VyOiB1bmRlZmluZWQsXG4gICAgbWF4U3Rkb3V0QnVmZmVyU2l6ZTogTUFYX0JVRkZFUl9TSVpFLFxuICAgIG1heFN0ZGVyckJ1ZmZlclNpemU6IE1BWF9CVUZGRVJfU0laRSxcbiAgfSwgb3B0cyk7XG5cbiAgLy8gdGhpcyBpcyBhbiBhc3luYyBmdW5jdGlvbiwgc28gcmV0dXJuIGEgcHJvbWlzZVxuICByZXR1cm4gYXdhaXQgbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIC8vIHNwYXduIHRoZSBjaGlsZCBwcm9jZXNzIHdpdGggb3B0aW9uczsgd2UgZG9uJ3QgY3VycmVudGx5IGV4cG9zZSBhbnkgb2ZcbiAgICAvLyB0aGUgb3RoZXIgJ3NwYXduJyBvcHRpb25zIHRocm91Z2ggdGhlIEFQSVxuICAgIGxldCBwcm9jID0gc3Bhd24oY21kLCBhcmdzLCB7Y3dkOiBvcHRzLmN3ZCwgZW52OiBvcHRzLmVudiwgc2hlbGw6IG9wdHMuc2hlbGx9KTtcbiAgICBsZXQgc3Rkb3V0QXJyID0gW10sIHN0ZGVyckFyciA9IFtdLCB0aW1lciA9IG51bGw7XG5cbiAgICAvLyBpZiB0aGUgcHJvY2VzcyBlcnJvcnMgb3V0LCByZWplY3QgdGhlIHByb21pc2VcbiAgICBwcm9jLm9uKCdlcnJvcicsIChlcnIpID0+IHtcbiAgICAgIGlmIChlcnIuZXJybm8gPT09ICdFTk9FTlQnKSB7XG4gICAgICAgIGVyciA9IGZvcm1hdEVub2VudChlcnIsIGNtZCwgb3B0cy5jd2QpO1xuICAgICAgfVxuICAgICAgcmVqZWN0KGVycik7XG4gICAgfSk7XG4gICAgaWYgKHByb2Muc3RkaW4pIHtcbiAgICAgIHByb2Muc3RkaW4ub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgICByZWplY3QobmV3IEVycm9yKGBTdGFuZGFyZCBpbnB1dCAnJHtlcnIuc3lzY2FsbH0nIGVycm9yOiAke2Vyci5zdGFja31gKSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgaGFuZGxlU3RyZWFtID0gKHN0cmVhbVR5cGUsIHN0cmVhbVByb3BzKSA9PiB7XG4gICAgICBpZiAoIXByb2Nbc3RyZWFtVHlwZV0pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBwcm9jW3N0cmVhbVR5cGVdLm9uKCdlcnJvcicsIChlcnIpID0+IHtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgJHtfLmNhcGl0YWxpemUoc3RyZWFtVHlwZSl9ICcke2Vyci5zeXNjYWxsfScgZXJyb3I6ICR7ZXJyLnN0YWNrfWApKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAob3B0cy5pZ25vcmVPdXRwdXQpIHtcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2lzc3Vlcy80MjM2XG4gICAgICAgIHByb2Nbc3RyZWFtVHlwZV0ub24oJ2RhdGEnLCAoKSA9PiB7fSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8ga2VlcCB0cmFjayBvZiB0aGUgc3RyZWFtIGlmIHdlIGRvbid0IHdhbnQgdG8gaWdub3JlIGl0XG4gICAgICBjb25zdCB7Y2h1bmtzLCBtYXhTaXplfSA9IHN0cmVhbVByb3BzO1xuICAgICAgbGV0IHNpemUgPSAwO1xuICAgICAgcHJvY1tzdHJlYW1UeXBlXS5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgICAgICBjaHVua3MucHVzaChjaHVuayk7XG4gICAgICAgIHNpemUgKz0gY2h1bmsubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoY2h1bmtzLmxlbmd0aCA+IDEgJiYgc2l6ZSA+PSBtYXhTaXplKSB7XG4gICAgICAgICAgc2l6ZSAtPSBjaHVua3NbMF0ubGVuZ3RoO1xuICAgICAgICAgIGNodW5rcy5zaGlmdCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRzLmxvZ2dlciAmJiBfLmlzRnVuY3Rpb24ob3B0cy5sb2dnZXIuZGVidWcpKSB7XG4gICAgICAgICAgb3B0cy5sb2dnZXIuZGVidWcoY2h1bmsudG9TdHJpbmcoKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgaGFuZGxlU3RyZWFtKCdzdGRvdXQnLCB7XG4gICAgICBtYXhTaXplOiBvcHRzLm1heFN0ZG91dEJ1ZmZlclNpemUsXG4gICAgICBjaHVua3M6IHN0ZG91dEFycixcbiAgICB9KTtcbiAgICBoYW5kbGVTdHJlYW0oJ3N0ZGVycicsIHtcbiAgICAgIG1heFNpemU6IG9wdHMubWF4U3RkZXJyQnVmZmVyU2l6ZSxcbiAgICAgIGNodW5rczogc3RkZXJyQXJyLFxuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gZ2V0U3RkaW8gKGlzQnVmZmVyKSB7XG4gICAgICBsZXQgc3Rkb3V0LCBzdGRlcnI7XG4gICAgICBpZiAoaXNCdWZmZXIpIHtcbiAgICAgICAgc3Rkb3V0ID0gQnVmZmVyLmNvbmNhdChzdGRvdXRBcnIpO1xuICAgICAgICBzdGRlcnIgPSBCdWZmZXIuY29uY2F0KHN0ZGVyckFycik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGRvdXQgPSBCdWZmZXIuY29uY2F0KHN0ZG91dEFycikudG9TdHJpbmcob3B0cy5lbmNvZGluZyk7XG4gICAgICAgIHN0ZGVyciA9IEJ1ZmZlci5jb25jYXQoc3RkZXJyQXJyKS50b1N0cmluZyhvcHRzLmVuY29kaW5nKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7c3Rkb3V0LCBzdGRlcnJ9O1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSBwcm9jZXNzIGVuZHMsIGVpdGhlciByZXNvbHZlIG9yIHJlamVjdCB0aGUgcHJvbWlzZSBiYXNlZCBvbiB0aGVcbiAgICAvLyBleGl0IGNvZGUgb2YgdGhlIHByb2Nlc3MuIGVpdGhlciB3YXksIGF0dGFjaCBzdGRvdXQsIHN0ZGVyciwgYW5kIGNvZGUuXG4gICAgLy8gQWxzbyBjbGVhbiB1cCB0aGUgdGltZXIgaWYgaXQgZXhpc3RzXG4gICAgcHJvYy5vbignY2xvc2UnLCAoY29kZSkgPT4ge1xuICAgICAgaWYgKHRpbWVyKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICB9XG4gICAgICBsZXQge3N0ZG91dCwgc3RkZXJyfSA9IGdldFN0ZGlvKG9wdHMuaXNCdWZmZXIpO1xuICAgICAgaWYgKGNvZGUgPT09IDApIHtcbiAgICAgICAgcmVzb2x2ZSh7c3Rkb3V0LCBzdGRlcnIsIGNvZGV9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBlcnIgPSBuZXcgRXJyb3IoYENvbW1hbmQgJyR7cmVwfScgZXhpdGVkIHdpdGggY29kZSAke2NvZGV9YCk7XG4gICAgICAgIGVyciA9IE9iamVjdC5hc3NpZ24oZXJyLCB7c3Rkb3V0LCBzdGRlcnIsIGNvZGV9KTtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBpZiB3ZSBzZXQgYSB0aW1lb3V0IG9uIHRoZSBjaGlsZCBwcm9jZXNzLCBjdXQgaW50byB0aGUgZXhlY3V0aW9uIGFuZFxuICAgIC8vIHJlamVjdCBpZiB0aGUgdGltZW91dCBpcyByZWFjaGVkLiBBdHRhY2ggdGhlIHN0ZG91dC9zdGRlcnIgd2UgY3VycmVudGx5XG4gICAgLy8gaGF2ZSBpbiBjYXNlIGl0J3MgaGVscGZ1bCBpbiBkZWJ1Z2dpbmdcbiAgICBpZiAob3B0cy50aW1lb3V0KSB7XG4gICAgICB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBsZXQge3N0ZG91dCwgc3RkZXJyfSA9IGdldFN0ZGlvKG9wdHMuaXNCdWZmZXIpO1xuICAgICAgICBsZXQgZXJyID0gbmV3IEVycm9yKGBDb21tYW5kICcke3JlcH0nIHRpbWVkIG91dCBhZnRlciAke29wdHMudGltZW91dH1tc2ApO1xuICAgICAgICBlcnIgPSBPYmplY3QuYXNzaWduKGVyciwge3N0ZG91dCwgc3RkZXJyLCBjb2RlOiBudWxsfSk7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAvLyByZWplY3QgYW5kIFRIRU4ga2lsbCB0byBhdm9pZCByYWNlIGNvbmRpdGlvbnMgd2l0aCB0aGUgaGFuZGxlcnNcbiAgICAgICAgLy8gYWJvdmVcbiAgICAgICAgcHJvYy5raWxsKG9wdHMua2lsbFNpZ25hbCk7XG4gICAgICB9LCBvcHRzLnRpbWVvdXQpO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCB7IGV4ZWMgfTtcbmV4cG9ydCBkZWZhdWx0IGV4ZWM7XG4iXSwiZmlsZSI6ImxpYi9leGVjLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.formatEnoent = formatEnoent;
|
|
9
|
+
|
|
10
|
+
require("source-map-support/register");
|
|
11
|
+
|
|
12
|
+
var _which = _interopRequireDefault(require("which"));
|
|
13
|
+
|
|
14
|
+
var _fs = _interopRequireDefault(require("fs"));
|
|
15
|
+
|
|
16
|
+
function formatEnoent(error, cmd, cwd = null) {
|
|
17
|
+
try {
|
|
18
|
+
_which.default.sync(cmd);
|
|
19
|
+
|
|
20
|
+
if (cwd) {
|
|
21
|
+
try {
|
|
22
|
+
_fs.default.accessSync(cwd, _fs.default.R_OK);
|
|
23
|
+
} catch (ign) {
|
|
24
|
+
error.message = `The current working directory '${cwd}' for '${cmd}' command ` + `either does not exist or is not accessible`;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
} catch (ign) {
|
|
28
|
+
error.message = `Command '${cmd}' not found. Is it installed?`;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
return error;
|
|
32
|
+
}require('source-map-support').install();
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9oZWxwZXJzLmpzIl0sIm5hbWVzIjpbImZvcm1hdEVub2VudCIsImVycm9yIiwiY21kIiwiY3dkIiwid2hpY2giLCJzeW5jIiwiZnMiLCJhY2Nlc3NTeW5jIiwiUl9PSyIsImlnbiIsIm1lc3NhZ2UiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBYUEsU0FBU0EsWUFBVCxDQUF1QkMsS0FBdkIsRUFBOEJDLEdBQTlCLEVBQW1DQyxHQUFHLEdBQUcsSUFBekMsRUFBK0M7QUFDN0MsTUFBSTtBQUNGQyxtQkFBTUMsSUFBTixDQUFXSCxHQUFYOztBQUNBLFFBQUlDLEdBQUosRUFBUztBQUNQLFVBQUk7QUFDRkcsb0JBQUdDLFVBQUgsQ0FBY0osR0FBZCxFQUFtQkcsWUFBR0UsSUFBdEI7QUFDRCxPQUZELENBRUUsT0FBT0MsR0FBUCxFQUFZO0FBQ1pSLFFBQUFBLEtBQUssQ0FBQ1MsT0FBTixHQUFpQixrQ0FBaUNQLEdBQUksVUFBU0QsR0FBSSxZQUFuRCxHQUNiLDRDQURIO0FBRUQ7QUFDRjtBQUNGLEdBVkQsQ0FVRSxPQUFPTyxHQUFQLEVBQVk7QUFDWlIsSUFBQUEsS0FBSyxDQUFDUyxPQUFOLEdBQWlCLFlBQVdSLEdBQUksK0JBQWhDO0FBQ0Q7O0FBQ0QsU0FBT0QsS0FBUDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHdoaWNoIGZyb20gJ3doaWNoJztcbmltcG9ydCBmcyBmcm9tICdmcyc7XG5cbi8qKlxuICogRGVjb3JhdGVzIEVOT0VOVCBlcnJvciByZWNlaXZlZCBmcm9tIGEgc3Bhd24gc3lzdGVtIGNhbGxcbiAqIHdpdGggYSBtb3JlIGRlc2NyaXB0aXZlIG1lc3NhZ2UsIHNvIGl0IGNvdWxkIGJlIHByb3Blcmx5IGhhbmRsZWQgYnkgYSB1c2VyLlxuICpcbiAqIEBwYXJhbSB7IUVycm9yfSBlcnJvciBPcmlnaW5hbCBlcnJvciBpbnN0YW5jZS4gISEhIFRoZSBpbnN0YW5jZSBpcyBtdXRhdGVkIGFmdGVyXG4gKiB0aGlzIGhlbHBlciBmdW5jdGlvbiBpbnZvY2F0aW9uXG4gKiBAcGFyYW0geyFzdHJpbmd9IGNtZCBPcmlnaW5hbCBjb21tYW5kIHRvIGV4ZWN1dGVcbiAqIEBwYXJhbSB7P3N0cmluZ30gY3dkIE9wdGlvbmFsIHBhdGggdG8gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJcbiAqIEByZXR1cm4ge0Vycm9yfSBNdXRhdGVkIGVycm9yIGluc3RhbmNlIHdpdGggYW4gaW1wcm92ZWQgZGVzY3JpcHRpb24gb3IgYW5cbiAqIHVuY2hhbmdlZCBlcnJvciBpbnN0YW5jZVxuICovXG5mdW5jdGlvbiBmb3JtYXRFbm9lbnQgKGVycm9yLCBjbWQsIGN3ZCA9IG51bGwpIHtcbiAgdHJ5IHtcbiAgICB3aGljaC5zeW5jKGNtZCk7XG4gICAgaWYgKGN3ZCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZnMuYWNjZXNzU3luYyhjd2QsIGZzLlJfT0spO1xuICAgICAgfSBjYXRjaCAoaWduKSB7XG4gICAgICAgIGVycm9yLm1lc3NhZ2UgPSBgVGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgJyR7Y3dkfScgZm9yICcke2NtZH0nIGNvbW1hbmQgYCArXG4gICAgICAgICAgYGVpdGhlciBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgYWNjZXNzaWJsZWA7XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChpZ24pIHtcbiAgICBlcnJvci5tZXNzYWdlID0gYENvbW1hbmQgJyR7Y21kfScgbm90IGZvdW5kLiBJcyBpdCBpbnN0YWxsZWQ/YDtcbiAgfVxuICByZXR1cm4gZXJyb3I7XG59XG5cbmV4cG9ydCB7IGZvcm1hdEVub2VudCB9O1xuIl0sImZpbGUiOiJsaWIvaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9
|
package/build/lib/subprocess.js
CHANGED
|
@@ -13,17 +13,22 @@ var _child_process = require("child_process");
|
|
|
13
13
|
|
|
14
14
|
var _events = _interopRequireDefault(require("events"));
|
|
15
15
|
|
|
16
|
-
var _through = _interopRequireDefault(require("through"));
|
|
17
|
-
|
|
18
16
|
var _bluebird = _interopRequireDefault(require("bluebird"));
|
|
19
17
|
|
|
20
18
|
var _shellQuote = require("shell-quote");
|
|
21
19
|
|
|
22
20
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
23
21
|
|
|
22
|
+
var _helpers = require("./helpers");
|
|
23
|
+
|
|
24
24
|
const {
|
|
25
25
|
EventEmitter
|
|
26
26
|
} = _events.default;
|
|
27
|
+
const MAX_LINE_PORTION_LENGTH = 0xFFFF;
|
|
28
|
+
|
|
29
|
+
function cutSuffix(str, suffixLength) {
|
|
30
|
+
return str.length > suffixLength ? ` ${str.substr(str.length - suffixLength)}`.substr(1) : str;
|
|
31
|
+
}
|
|
27
32
|
|
|
28
33
|
class SubProcess extends EventEmitter {
|
|
29
34
|
constructor(cmd, args = [], opts = {}) {
|
|
@@ -97,9 +102,14 @@ class SubProcess extends EventEmitter {
|
|
|
97
102
|
stderr: ''
|
|
98
103
|
};
|
|
99
104
|
|
|
100
|
-
const handleOutput =
|
|
105
|
+
const handleOutput = streams => {
|
|
106
|
+
const {
|
|
107
|
+
stdout,
|
|
108
|
+
stderr
|
|
109
|
+
} = streams;
|
|
110
|
+
|
|
101
111
|
try {
|
|
102
|
-
if (startDetector && startDetector(
|
|
112
|
+
if (startDetector && startDetector(stdout, stderr)) {
|
|
103
113
|
startDetector = null;
|
|
104
114
|
resolve();
|
|
105
115
|
}
|
|
@@ -107,20 +117,26 @@ class SubProcess extends EventEmitter {
|
|
|
107
117
|
reject(e);
|
|
108
118
|
}
|
|
109
119
|
|
|
110
|
-
this.emit('output',
|
|
120
|
+
this.emit('output', stdout, stderr);
|
|
111
121
|
|
|
112
|
-
for (const
|
|
113
|
-
if (!
|
|
114
|
-
|
|
122
|
+
for (const [streamName, streamData] of _lodash.default.toPairs(streams)) {
|
|
123
|
+
if (!streamData) continue;
|
|
124
|
+
const lines = streamData.split('\n').map(x => ` ${x}`.substr(1));
|
|
115
125
|
|
|
116
126
|
if (lines.length > 1) {
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
this.emit(`lines-${
|
|
121
|
-
this.emitLines(
|
|
127
|
+
lines[0] = this.lastLinePortion[streamName] + lines[0];
|
|
128
|
+
this.lastLinePortion[streamName] = cutSuffix(_lodash.default.last(lines), MAX_LINE_PORTION_LENGTH);
|
|
129
|
+
const resultLines = lines.slice(0, -1);
|
|
130
|
+
this.emit(`lines-${streamName}`, resultLines);
|
|
131
|
+
this.emitLines(streamName, resultLines);
|
|
122
132
|
} else {
|
|
123
|
-
|
|
133
|
+
const currentPortion = cutSuffix(lines[0], MAX_LINE_PORTION_LENGTH);
|
|
134
|
+
|
|
135
|
+
if (this.lastLinePortion[streamName].length + currentPortion.length > MAX_LINE_PORTION_LENGTH) {
|
|
136
|
+
this.lastLinePortion[streamName] = currentPortion;
|
|
137
|
+
} else {
|
|
138
|
+
this.lastLinePortion[streamName] += currentPortion;
|
|
139
|
+
}
|
|
124
140
|
}
|
|
125
141
|
}
|
|
126
142
|
};
|
|
@@ -130,27 +146,25 @@ class SubProcess extends EventEmitter {
|
|
|
130
146
|
this.proc.kill('SIGINT');
|
|
131
147
|
|
|
132
148
|
if (err.errno === 'ENOENT') {
|
|
133
|
-
|
|
149
|
+
var _this$opts;
|
|
150
|
+
|
|
151
|
+
err = (0, _helpers.formatEnoent)(err, this.cmd, (_this$opts = this.opts) === null || _this$opts === void 0 ? void 0 : _this$opts.cwd);
|
|
134
152
|
}
|
|
135
153
|
|
|
136
154
|
reject(err);
|
|
137
155
|
});
|
|
138
156
|
|
|
139
157
|
if (this.proc.stdout) {
|
|
140
|
-
this.proc.stdout.
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
stderr: ''
|
|
144
|
-
});
|
|
158
|
+
this.proc.stdout.on('data', chunk => handleOutput({
|
|
159
|
+
stdout: chunk.toString(),
|
|
160
|
+
stderr: ''
|
|
145
161
|
}));
|
|
146
162
|
}
|
|
147
163
|
|
|
148
164
|
if (this.proc.stderr) {
|
|
149
|
-
this.proc.stderr.
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
stderr
|
|
153
|
-
});
|
|
165
|
+
this.proc.stderr.on('data', chunk => handleOutput({
|
|
166
|
+
stdout: '',
|
|
167
|
+
stderr: chunk.toString()
|
|
154
168
|
}));
|
|
155
169
|
}
|
|
156
170
|
|
|
@@ -250,4 +264,4 @@ var _default = SubProcess;
|
|
|
250
264
|
exports.default = _default;require('source-map-support').install();
|
|
251
265
|
|
|
252
266
|
|
|
253
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9zdWJwcm9jZXNzLmpzIl0sIm5hbWVzIjpbIkV2ZW50RW1pdHRlciIsImV2ZW50cyIsIlN1YlByb2Nlc3MiLCJjb25zdHJ1Y3RvciIsImNtZCIsImFyZ3MiLCJvcHRzIiwiRXJyb3IiLCJfIiwiaXNTdHJpbmciLCJpc0FycmF5IiwicHJvYyIsImV4cGVjdGluZ0V4aXQiLCJyZXAiLCJpc1J1bm5pbmciLCJlbWl0TGluZXMiLCJzdHJlYW0iLCJsaW5lcyIsImxpbmUiLCJlbWl0IiwidG9VcHBlckNhc2UiLCJzdGFydCIsInN0YXJ0RGV0ZWN0b3IiLCJ0aW1lb3V0TXMiLCJkZXRhY2giLCJzdGFydERlbGF5IiwiZ2VuZXJpY1N0YXJ0RGV0ZWN0b3IiLCJzdGRvdXQiLCJzdGRlcnIiLCJpc051bWJlciIsImlzQm9vbGVhbiIsImRldGFjaGVkIiwiQiIsInJlc29sdmUiLCJyZWplY3QiLCJzZXRFbmNvZGluZyIsImVuY29kaW5nIiwibGFzdExpbmVQb3J0aW9uIiwiaGFuZGxlT3V0cHV0IiwiZGF0YSIsImUiLCJzcGxpdCIsImxlbmd0aCIsInJldExpbmVzIiwic2xpY2UiLCJvbiIsImVyciIsInJlbW92ZUFsbExpc3RlbmVycyIsImtpbGwiLCJlcnJubyIsInBpcGUiLCJjb2RlIiwic2lnbmFsIiwiaGFuZGxlTGFzdExpbmVzIiwiZXZlbnQiLCJzZXRUaW1lb3V0IiwiZmluYWxseSIsInVucmVmIiwibGFzdExpbmVzIiwic3RvcCIsInRpbWVvdXQiLCJqb2luIiwiYWxsb3dlZEV4aXRDb2RlcyIsImluZGV4T2YiLCJkZXRhY2hQcm9jZXNzIiwicGlkIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUVBOztBQUNBOztBQUNBOztBQUVBOztBQUNBOztBQUNBOztBQUhBLE1BQU07QUFBRUEsRUFBQUE7QUFBRixJQUFtQkMsZUFBekI7O0FBTUEsTUFBTUMsVUFBTixTQUF5QkYsWUFBekIsQ0FBc0M7QUFDcENHLEVBQUFBLFdBQVcsQ0FBRUMsR0FBRixFQUFP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bnQtZGlzYWJsZSBwcm9taXNlL3ByZWZlci1hd2FpdC10by1jYWxsYmFja3MgKi9cblxuaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCBldmVudHMgZnJvbSAnZXZlbnRzJztcbmltcG9ydCB0aHJvdWdoIGZyb20gJ3Rocm91Z2gnO1xuY29uc3QgeyBFdmVudEVtaXR0ZXIgfSA9IGV2ZW50cztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB7IHF1b3RlIH0gZnJvbSAnc2hlbGwtcXVvdGUnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcblxuXG5jbGFzcyBTdWJQcm9jZXNzIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgY29uc3RydWN0b3IgKGNtZCwgYXJncyA9IFtdLCBvcHRzID0ge30pIHtcbiAgICBzdXBlcigpO1xuICAgIGlmICghY21kKSB0aHJvdyBuZXcgRXJyb3IoJ0NvbW1hbmQgaXMgcmVxdWlyZWQnKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjdXJseVxuICAgIGlmICghXy5pc1N0cmluZyhjbWQpKSB0aHJvdyBuZXcgRXJyb3IoJ0NvbW1hbmQgbXVzdCBiZSBhIHN0cmluZycpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGN1cmx5XG4gICAgaWYgKCFfLmlzQXJyYXkoYXJncykpIHRocm93IG5ldyBFcnJvcignQXJncyBtdXN0IGJlIGFuIGFycmF5Jyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY3VybHlcblxuICAgIHRoaXMuY21kID0gY21kO1xuICAgIHRoaXMuYXJncyA9IGFyZ3M7XG4gICAgdGhpcy5wcm9jID0gbnVsbDtcbiAgICB0aGlzLm9wdHMgPSBvcHRzO1xuICAgIHRoaXMuZXhwZWN0aW5nRXhpdCA9IGZhbHNlO1xuXG4gICAgLy8gZ2V0IGEgcXVvdGVkIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb21tYW5kIGZvciBlcnJvciBzdHJpbmdzXG4gICAgdGhpcy5yZXAgPSBxdW90ZShbY21kLCAuLi5hcmdzXSk7XG4gIH1cblxuICBnZXQgaXNSdW5uaW5nICgpIHtcbiAgICAvLyBwcmVzZW5jZSBvZiBgcHJvY2AgbWVhbnMgd2UgaGF2ZSBjb25uZWN0ZWQgYW5kIHN0YXJ0ZWRcbiAgICByZXR1cm4gISF0aGlzLnByb2M7XG4gIH1cblxuICBlbWl0TGluZXMgKHN0cmVhbSwgbGluZXMpIHtcbiAgICBmb3IgKGxldCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgICB0aGlzLmVtaXQoJ3N0cmVhbS1saW5lJywgYFske3N0cmVhbS50b1VwcGVyQ2FzZSgpfV0gJHtsaW5lfWApO1xuICAgIH1cbiAgfVxuXG4gIC8vIHNwYXduIHRoZSBzdWJwcm9jZXNzIGFuZCByZXR1cm4gY29udHJvbCB3aGVuZXZlciB3ZSBkZWVtIHRoYXQgaXQgaGFzIGZ1bGx5XG4gIC8vIFwic3RhcnRlZFwiXG4gIGFzeW5jIHN0YXJ0IChzdGFydERldGVjdG9yID0gbnVsbCwgdGltZW91dE1zID0gbnVsbCwgZGV0YWNoID0gZmFsc2UpIHtcbiAgICBsZXQgc3RhcnREZWxheSA9IDEwO1xuXG4gICAgY29uc3QgZ2VuZXJpY1N0YXJ0RGV0ZWN0b3IgPSBmdW5jdGlvbiBnZW5lcmljU3RhcnREZXRlY3RvciAoc3Rkb3V0LCBzdGRlcnIpIHtcbiAgICAgIHJldHVybiBzdGRvdXQgfHwgc3RkZXJyO1xuICAgIH07XG5cbiAgICAvLyB0aGUgZGVmYXVsdCBzdGFydCBkZXRlY3RvciBzaW1wbHkgcmV0dXJucyB0cnVlIHdoZW4gd2UgZ2V0IGFueSBvdXRwdXRcbiAgICBpZiAoc3RhcnREZXRlY3RvciA9PT0gbnVsbCkge1xuICAgICAgc3RhcnREZXRlY3RvciA9IGdlbmVyaWNTdGFydERldGVjdG9yO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSB1c2VyIHBhc3NlcyBhIG51bWJlciwgdGhlbiB3ZSBzaW1wbHkgZGVsYXkgYSBjZXJ0YWluIGFtb3VudCBvZlxuICAgIC8vIHRpbWUgYmVmb3JlIHJldHVybmluZyBjb250cm9sLCByYXRoZXIgdGhhbiB3YWl0aW5nIGZvciBhIGNvbmRpdGlvblxuICAgIGlmIChfLmlzTnVtYmVyKHN0YXJ0RGV0ZWN0b3IpKSB7XG4gICAgICBzdGFydERlbGF5ID0gc3RhcnREZXRlY3RvcjtcbiAgICAgIHN0YXJ0RGV0ZWN0b3IgPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSB1c2VyIHBhc3NlcyBpbiBhIGJvb2xlYW4gYXMgb25lIG9mIHRoZSBhcmd1bWVudHMsIHVzZSBpdCBmb3IgYGRldGFjaGBcbiAgICBpZiAoXy5pc0Jvb2xlYW4oc3RhcnREZXRlY3RvcikgJiYgc3RhcnREZXRlY3Rvcikge1xuICAgICAgaWYgKCF0aGlzLm9wdHMuZGV0YWNoZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gZGV0YWNoIHByb2Nlc3MgdGhhdCBpcyBub3Qgc3RhcnRlZCB3aXRoICdkZXRhY2hlZCcgb3B0aW9uYCk7XG4gICAgICB9XG4gICAgICBkZXRhY2ggPSB0cnVlO1xuICAgICAgc3RhcnREZXRlY3RvciA9IGdlbmVyaWNTdGFydERldGVjdG9yO1xuICAgIH0gZWxzZSBpZiAoXy5pc0Jvb2xlYW4odGltZW91dE1zKSAmJiB0aW1lb3V0TXMpIHtcbiAgICAgIGlmICghdGhpcy5vcHRzLmRldGFjaGVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGRldGFjaCBwcm9jZXNzIHRoYXQgaXMgbm90IHN0YXJ0ZWQgd2l0aCAnZGV0YWNoZWQnIG9wdGlvbmApO1xuICAgICAgfVxuICAgICAgZGV0YWNoID0gdHJ1ZTtcbiAgICAgIHRpbWVvdXRNcyA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gcmV0dXJuIGEgcHJvbWlzZSBzbyB3ZSBjYW4gd3JhcCB0aGUgYXN5bmMgYmVoYXZpb3JcbiAgICByZXR1cm4gYXdhaXQgbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgLy8gYWN0dWFsbHkgc3Bhd24gdGhlIHN1YnByb2NcbiAgICAgIHRoaXMucHJvYyA9IHNwYXduKHRoaXMuY21kLCB0aGlzLmFyZ3MsIHRoaXMub3B0cyk7XG5cbiAgICAgIGlmICh0aGlzLnByb2Muc3Rkb3V0KSB7XG4gICAgICAgIHRoaXMucHJvYy5zdGRvdXQuc2V0RW5jb2RpbmcodGhpcy5vcHRzLmVuY29kaW5nIHx8ICd1dGY4Jyk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5wcm9jLnN0ZGVycikge1xuICAgICAgICB0aGlzLnByb2Muc3RkZXJyLnNldEVuY29kaW5nKHRoaXMub3B0cy5lbmNvZGluZyB8fCAndXRmOCcpO1xuICAgICAgfVxuICAgICAgdGhpcy5sYXN0TGluZVBvcnRpb24gPSB7c3Rkb3V0OiAnJywgc3RkZXJyOiAnJ307XG5cbiAgICAgIC8vIHRoaXMgZnVuY3Rpb24gaGFuZGxlcyBvdXRwdXQgdGhhdCB3ZSBjb2xsZWN0IGZyb20gdGhlIHN1YnByb2NcbiAgICAgIGNvbnN0IGhhbmRsZU91dHB1dCA9IChkYXRhKSA9PiB7XG4gICAgICAgIC8vIGlmIHdlIGhhdmUgYSBzdGFydERldGVjdG9yLCBydW4gaXQgb24gdGhlIG91dHB1dCBzbyB3ZSBjYW4gcmVzb2x2ZS9cbiAgICAgICAgLy8gcmVqZWN0IGFuZCBtb3ZlIG9uIGZyb20gc3RhcnRcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAoc3RhcnREZXRlY3RvciAmJiBzdGFydERldGVjdG9yKGRhdGEuc3Rkb3V0LCBkYXRhLnN0ZGVycikpIHtcbiAgICAgICAgICAgIHN0YXJ0RGV0ZWN0b3IgPSBudWxsO1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGVtaXQgdGhlIGFjdHVhbCBvdXRwdXQgZm9yIHdob21ldmVyJ3MgbGlzdGVuaW5nXG4gICAgICAgIHRoaXMuZW1pdCgnb3V0cHV0JywgZGF0YS5zdGRvdXQsIGRhdGEuc3RkZXJyKTtcblxuICAgICAgICAvLyB3ZSBhbHNvIHdhbnQgdG8gZW1pdCBsaW5lcywgYnV0IGl0J3MgbW9yZSBjb21wbGV4IHNpbmNlIG91dHB1dFxuICAgICAgICAvLyBjb21lcyBpbiBjaHVua3MgYW5kIGEgbGluZSBjb3VsZCBjb21lIGluIHR3byBkaWZmZXJlbnQgY2h1bmtzLCBzb1xuICAgICAgICAvLyB3ZSBoYXZlIGxvZ2ljIHRvIGhhbmRsZSB0aGF0IGNhc2UgKHVzaW5nIHRoaXMubGFzdExpbmVQb3J0aW9uIHRvXG4gICAgICAgIC8vIHJlbWVtYmVyIGEgbGluZSB0aGF0IHN0YXJ0ZWQgYnV0IGRpZCBub3QgZmluaXNoIGluIHRoZSBsYXN0IGNodW5rKVxuICAgICAgICBmb3IgKGNvbnN0IHN0cmVhbSBvZiBbJ3N0ZG91dCcsICdzdGRlcnInXSkge1xuICAgICAgICAgIGlmICghZGF0YVtzdHJlYW1dKSBjb250aW51ZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjdXJseVxuICAgICAgICAgIGxldCBsaW5lcyA9IGRhdGFbc3RyZWFtXS5zcGxpdChcIlxcblwiKTtcbiAgICAgICAgICBpZiAobGluZXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgbGV0IHJldExpbmVzID0gbGluZXMuc2xpY2UoMCwgLTEpO1xuICAgICAgICAgICAgcmV0TGluZXNbMF0gPSB0aGlzLmxhc3RMaW5lUG9ydGlvbltzdHJlYW1dICsgcmV0TGluZXNbMF07XG4gICAgICAgICAgICB0aGlzLmxhc3RMaW5lUG9ydGlvbltzdHJlYW1dID0gbGluZXNbbGluZXMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICB0aGlzLmVtaXQoYGxpbmVzLSR7c3RyZWFtfWAsIHJldExpbmVzKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdExpbmVzKHN0cmVhbSwgcmV0TGluZXMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmxhc3RMaW5lUG9ydGlvbltzdHJlYW1dICs9IGxpbmVzWzBdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgLy8gaWYgd2UgZ2V0IGFuIGVycm9yIHNwYXduaW5nIHRoZSBwcm9jLCByZWplY3QgYW5kIGNsZWFuIHVwIHRoZSBwcm9jXG4gICAgICB0aGlzLnByb2Mub24oJ2Vycm9yJywgZXJyID0+IHtcbiAgICAgICAgdGhpcy5wcm9jLnJlbW92ZUFsbExpc3RlbmVycygnZXhpdCcpO1xuICAgICAgICB0aGlzLnByb2Mua2lsbCgnU0lHSU5UJyk7XG5cbiAgICAgICAgaWYgKGVyci5lcnJubyA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgICBlcnIgPSBuZXcgRXJyb3IoYENvbW1hbmQgJyR7dGhpcy5jbWR9JyBub3QgZm91bmQuIElzIGl0IGluc3RhbGxlZD9gKTtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAodGhpcy5wcm9jLnN0ZG91dCkge1xuICAgICAgICB0aGlzLnByb2Muc3Rkb3V0LnBpcGUodGhyb3VnaChzdGRvdXQgPT4ge1xuICAgICAgICAgIGhhbmRsZU91dHB1dCh7c3Rkb3V0LCBzdGRlcnI6ICcnfSk7XG4gICAgICAgIH0pKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMucHJvYy5zdGRlcnIpIHtcbiAgICAgICAgdGhpcy5wcm9jLnN0ZGVyci5waXBlKHRocm91Z2goc3RkZXJyID0+IHtcbiAgICAgICAgICBoYW5kbGVPdXRwdXQoe3N0ZG91dDogJycsIHN0ZGVycn0pO1xuICAgICAgICB9KSk7XG4gICAgICB9XG5cbiAgICAgIC8vIHdoZW4gdGhlIHByb2MgZXhpdHMsIHdlIG1pZ2h0IHN0aWxsIGhhdmUgYSBidWZmZXIgb2YgbGluZXMgd2Ugd2VyZVxuICAgICAgLy8gd2FpdGluZyBvbiBtb3JlIGNodW5rcyB0byBjb21wbGV0ZS4gR28gYWhlYWQgYW5kIGVtaXQgdGhvc2UsIHRoZW5cbiAgICAgIC8vIHJlLWVtaXQgdGhlIGV4aXQgc28gYSBsaXN0ZW5lciBjYW4gaGFuZGxlIHRoZSBwb3NzaWJseS11bmV4cGVjdGVkIGV4aXRcbiAgICAgIHRoaXMucHJvYy5vbignZXhpdCcsIChjb2RlLCBzaWduYWwpID0+IHtcbiAgICAgICAgdGhpcy5oYW5kbGVMYXN0TGluZXMoKTtcblxuICAgICAgICB0aGlzLmVtaXQoJ2V4aXQnLCBjb2RlLCBzaWduYWwpO1xuXG4gICAgICAgIC8vIGluIGFkZGl0aW9uIHRvIHRoZSBiYXJlIGV4aXQgZXZlbnQsIGFsc28gZW1pdCBvbmUgb2YgdGhyZWUgb3RoZXJcbiAgICAgICAgLy8gZXZlbnRzIHRoYXQgY29udGFpbiBtb3JlIGhlbHBmdWwgaW5mb3JtYXRpb246XG4gICAgICAgIC8vICdzdG9wJzogd2Ugc3RvcHBlZCB0aGlzXG4gICAgICAgIC8vICdkaWUnOiB0aGUgcHJvY2VzcyBlbmRlZCBvdXQgb2Ygb3VyIGNvbnRyb2wgd2l0aCBhIG5vbi16ZXJvIGV4aXRcbiAgICAgICAgLy8gJ2VuZCc6IHRoZSBwcm9jZXNzIGVuZGVkIG91dCBvZiBvdXIgY29udHJvbCB3aXRoIGEgemVybyBleGl0XG4gICAgICAgIGxldCBldmVudCA9IHRoaXMuZXhwZWN0aW5nRXhpdCA/ICdzdG9wJyA6ICdkaWUnO1xuICAgICAgICBpZiAoIXRoaXMuZXhwZWN0aW5nRXhpdCAmJiBjb2RlID09PSAwKSB7XG4gICAgICAgICAgZXZlbnQgPSAnZW5kJztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVtaXQoZXZlbnQsIGNvZGUsIHNpZ25hbCk7XG5cbiAgICAgICAgLy8gZmluYWxseSBjbGVhbiB1cCB0aGUgcHJvYyBhbmQgbWFrZSBzdXJlIHRvIHJlc2V0IG91ciBleGl0XG4gICAgICAgIC8vIGV4cGVjdGF0aW9uc1xuICAgICAgICB0aGlzLnByb2MgPSBudWxsO1xuICAgICAgICB0aGlzLmV4cGVjdGluZ0V4aXQgPSBmYWxzZTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBpZiB0aGUgdXNlciBoYXNuJ3QgZ2l2ZW4gdXMgYSBzdGFydERldGVjdG9yLCBpbnN0ZWFkIGp1c3QgcmVzb2x2ZVxuICAgICAgLy8gd2hlbiBzdGFydERlbGF5IG1zIGhhdmUgcGFzc2VkXG4gICAgICBpZiAoIXN0YXJ0RGV0ZWN0b3IpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7IHJlc29sdmUoKTsgfSwgc3RhcnREZWxheSk7XG4gICAgICB9XG5cbiAgICAgIC8vIGlmIHRoZSB1c2VyIGhhcyBnaXZlbiB1cyBhIHRpbWVvdXQsIHN0YXJ0IHRoZSBjbG9jayBmb3IgcmVqZWN0aW5nXG4gICAgICAvLyB0aGUgcHJvbWlzZSBpZiB3ZSB0YWtlIHRvbyBsb25nIHRvIHN0YXJ0XG4gICAgICBpZiAoXy5pc051bWJlcih0aW1lb3V0TXMpKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYFRoZSBwcm9jZXNzIGRpZCBub3Qgc3RhcnQgd2l0aGluICR7dGltZW91dE1zfW1zIGAgK1xuICAgICAgICAgICAgYChjbWQ6ICcke3RoaXMucmVwfScpYCkpO1xuICAgICAgICB9LCB0aW1lb3V0TXMpO1xuICAgICAgfVxuICAgIH0pLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgaWYgKGRldGFjaCAmJiB0aGlzLnByb2MpIHtcbiAgICAgICAgdGhpcy5wcm9jLnVucmVmKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBoYW5kbGVMYXN0TGluZXMgKCkge1xuICAgIGZvciAobGV0IHN0cmVhbSBvZiBbJ3N0ZG91dCcsICdzdGRlcnInXSkge1xuICAgICAgaWYgKHRoaXMubGFzdExpbmVQb3J0aW9uW3N0cmVhbV0pIHtcbiAgICAgICAgY29uc3QgbGFzdExpbmVzID0gW3RoaXMubGFzdExpbmVQb3J0aW9uW3N0cmVhbV1dO1xuICAgICAgICB0aGlzLmVtaXQoYGxpbmVzLSR7c3RyZWFtfWAsIGxhc3RMaW5lcyk7XG4gICAgICAgIHRoaXMuZW1pdExpbmVzKHN0cmVhbSwgbGFzdExpbmVzKTtcbiAgICAgICAgdGhpcy5sYXN0TGluZVBvcnRpb25bc3RyZWFtXSA9ICcnO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHN0b3AgKHNpZ25hbCA9ICdTSUdURVJNJywgdGltZW91dCA9IDEwMDAwKSB7XG4gICAgaWYgKCF0aGlzLmlzUnVubmluZykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW4ndCBzdG9wIHByb2Nlc3M7IGl0J3Mgbm90IGN1cnJlbnRseSBydW5uaW5nIChjbWQ6ICcke3RoaXMucmVwfScpYCk7XG4gICAgfVxuICAgIC8vIG1ha2Ugc3VyZSB0byBlbWl0IGFueSBkYXRhIGluIG91ciBsaW5lcyBidWZmZXIgd2hlbmV2ZXIgd2UncmUgZG9uZSB3aXRoXG4gICAgLy8gdGhlIHByb2NcbiAgICB0aGlzLmhhbmRsZUxhc3RMaW5lcygpO1xuICAgIHJldHVybiBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLnByb2Mub24oJ2Nsb3NlJywgcmVzb2x2ZSk7XG4gICAgICB0aGlzLmV4cGVjdGluZ0V4aXQgPSB0cnVlO1xuICAgICAgdGhpcy5wcm9jLmtpbGwoc2lnbmFsKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICByZWplY3QobmV3IEVycm9yKGBQcm9jZXNzIGRpZG4ndCBlbmQgYWZ0ZXIgJHt0aW1lb3V0fW1zIChjbWQ6ICcke3RoaXMucmVwfScpYCkpO1xuICAgICAgfSwgdGltZW91dCk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBqb2luIChhbGxvd2VkRXhpdENvZGVzID0gWzBdKSB7XG4gICAgaWYgKCF0aGlzLmlzUnVubmluZykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgam9pbiBwcm9jZXNzOyBpdCBpcyBub3QgY3VycmVudGx5IHJ1bm5pbmcgKGNtZDogJyR7dGhpcy5yZXB9JylgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXdhaXQgbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5wcm9jLm9uKCdleGl0JywgKGNvZGUpID0+IHtcbiAgICAgICAgaWYgKGFsbG93ZWRFeGl0Q29kZXMuaW5kZXhPZihjb2RlKSA9PT0gLTEpIHtcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKGBQcm9jZXNzIGVuZGVkIHdpdGggZXhpdGNvZGUgJHtjb2RlfSAoY21kOiAnJHt0aGlzLnJlcH0nKWApKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNvbHZlKGNvZGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qXG4gICAqIFRoaXMgd2lsbCBvbmx5IHdvcmsgaWYgdGhlIHByb2Nlc3MgaXMgY3JlYXRlZCB3aXRoIHRoZSBgZGV0YWNoZWRgIG9wdGlvblxuICAgKi9cbiAgZGV0YWNoUHJvY2VzcyAoKSB7XG4gICAgaWYgKCF0aGlzLm9wdHMuZGV0YWNoZWQpIHtcbiAgICAgIC8vIHRoaXMgbWVhbnMgdGhhdCB0aGVyZSBpcyBhIG1pc2NvbmZpZ3VyYXRpb24gaW4gdGhlIGNhbGxpbmcgY29kZVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gZGV0YWNoIHByb2Nlc3MgdGhhdCBpcyBub3Qgc3RhcnRlZCB3aXRoICdkZXRhY2hlZCcgb3B0aW9uYCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnByb2MpIHtcbiAgICAgIHRoaXMucHJvYy51bnJlZigpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBwaWQgKCkge1xuICAgIHJldHVybiB0aGlzLnByb2MgPyB0aGlzLnByb2MucGlkIDogbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgeyBTdWJQcm9jZXNzIH07XG5leHBvcnQgZGVmYXVsdCBTdWJQcm9jZXNzO1xuIl0sImZpbGUiOiJsaWIvc3VicHJvY2Vzcy5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9
|
|
267
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9zdWJwcm9jZXNzLmpzIl0sIm5hbWVzIjpbIkV2ZW50RW1pdHRlciIsImV2ZW50cyIsIk1BWF9MSU5FX1BPUlRJT05fTEVOR1RIIiwiY3V0U3VmZml4Iiwic3RyIiwic3VmZml4TGVuZ3RoIiwibGVuZ3RoIiwic3Vic3RyIiwiU3ViUHJvY2VzcyIsImNvbnN0cnVjdG9yIiwiY21kIiwiYXJncyIsIm9wdHMiLCJFcnJvciIsIl8iLCJpc1N0cmluZyIsImlzQXJyYXkiLCJwcm9jIiwiZXhwZWN0aW5nRXhpdCIsInJlcCIsImlzUnVubmluZyIsImVtaXRMaW5lcyIsInN0cmVhbSIsImxpbmVzIiwibGluZSIsImVtaXQiLCJ0b1VwcGVyQ2FzZSIsInN0YXJ0Iiwic3RhcnREZXRlY3RvciIsInRpbWVvdXRNcyIsImRldGFjaCIsInN0YXJ0RGVsYXkiLCJnZW5lcmljU3RhcnREZXRlY3RvciIsInN0ZG91dCIsInN0ZGVyciIsImlzTnVtYmVyIiwiaXNCb29sZWFuIiwiZGV0YWNoZWQiLCJCIiwicmVzb2x2ZSIsInJlamVjdCIsInNldEVuY29kaW5nIiwiZW5jb2RpbmciLCJsYXN0TGluZVBvcnRpb24iLCJoYW5kbGVPdXRwdXQiLCJzdHJlYW1zIiwiZSIsInN0cmVhbU5hbWUiLCJzdHJlYW1EYXRhIiwidG9QYWlycyIsInNwbGl0IiwibWFwIiwieCIsImxhc3QiLCJyZXN1bHRMaW5lcyIsInNsaWNlIiwiY3VycmVudFBvcnRpb24iLCJvbiIsImVyciIsInJlbW92ZUFsbExpc3RlbmVycyIsImtpbGwiLCJlcnJubyIsImN3ZCIsImNodW5rIiwidG9TdHJpbmciLCJjb2RlIiwic2lnbmFsIiwiaGFuZGxlTGFzdExpbmVzIiwiZXZlbnQiLCJzZXRUaW1lb3V0IiwiZmluYWxseSIsInVucmVmIiwibGFzdExpbmVzIiwic3RvcCIsInRpbWVvdXQiLCJqb2luIiwiYWxsb3dlZEV4aXRDb2RlcyIsImluZGV4T2YiLCJkZXRhY2hQcm9jZXNzIiwicGlkIl0sIm1hcHBp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QUNsQyxRQUFJLENBQUMsS0FBS3hELFNBQVYsRUFBcUI7QUFDbkIsWUFBTSxJQUFJUCxLQUFKLENBQVcsMkRBQTBELEtBQUtNLEdBQUksSUFBOUUsQ0FBTjtBQUNEOztBQUVELFdBQU8sTUFBTSxJQUFJbUIsaUJBQUosQ0FBTSxDQUFDQyxPQUFELEVBQVVDLE1BQVYsS0FBcUI7QUFDdEMsV0FBS3ZCLElBQUwsQ0FBVXdDLEVBQVYsQ0FBYSxNQUFiLEVBQXNCUSxJQUFELElBQVU7QUFDN0IsWUFBSVcsZ0JBQWdCLENBQUNDLE9BQWpCLENBQXlCWixJQUF6QixNQUFtQyxDQUFDLENBQXhDLEVBQTJDO0FBQ3pDekIsVUFBQUEsTUFBTSxDQUFDLElBQUkzQixLQUFKLENBQVcsK0JBQThCb0QsSUFBSyxXQUFVLEtBQUs5QyxHQUFJLElBQWpFLENBQUQsQ0FBTjtBQUNELFNBRkQsTUFFTztBQUNMb0IsVUFBQUEsT0FBTyxDQUFDMEIsSUFBRCxDQUFQO0FBQ0Q7QUFDRixPQU5EO0FBT0QsS0FSWSxDQUFiO0FBU0Q7O0FBS0RhLEVBQUFBLGFBQWEsR0FBSTtBQUNmLFFBQUksQ0FBQyxLQUFLbEUsSUFBTCxDQUFVeUIsUUFBZixFQUF5QjtBQUV2QixZQUFNLElBQUl4QixLQUFKLENBQVcscUVBQVgsQ0FBTjtBQUNEOztBQUNELFFBQUksS0FBS0ksSUFBVCxFQUFlO0FBQ2IsV0FBS0EsSUFBTCxDQUFVc0QsS0FBVjtBQUNEO0FBQ0Y7O0FBRUQsTUFBSVEsR0FBSixHQUFXO0FBQ1QsV0FBTyxLQUFLOUQsSUFBTCxHQUFZLEtBQUtBLElBQUwsQ0FBVThELEdBQXRCLEdBQTRCLElBQW5DO0FBQ0Q7O0FBcFBtQzs7O2VBd1B2QnZFLFUiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBwcm9taXNlL3ByZWZlci1hd2FpdC10by1jYWxsYmFja3MgKi9cblxuaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCBldmVudHMgZnJvbSAnZXZlbnRzJztcbmNvbnN0IHsgRXZlbnRFbWl0dGVyIH0gPSBldmVudHM7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgeyBxdW90ZSB9IGZyb20gJ3NoZWxsLXF1b3RlJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBmb3JtYXRFbm9lbnQgfSBmcm9tICcuL2hlbHBlcnMnO1xuXG5cbi8vIFRoaXMgaXMgbmVlZGVkIHRvIGF2b2lkIG1lbW9yeSBsZWFrc1xuLy8gd2hlbiB0aGUgcHJvY2VzcyBvdXRwdXQgaXMgdG9vIGxvbmcgYW5kIGNvbnRhaW5zXG4vLyBubyBsaW5lIGJyZWFrc1xuY29uc3QgTUFYX0xJTkVfUE9SVElPTl9MRU5HVEggPSAweEZGRkY7XG5cbmZ1bmN0aW9uIGN1dFN1ZmZpeCAoc3RyLCBzdWZmaXhMZW5ndGgpIHtcbiAgcmV0dXJuIHN0ci5sZW5ndGggPiBzdWZmaXhMZW5ndGhcbiAgICAvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0yODY5XG4gICAgPyBgICR7c3RyLnN1YnN0cihzdHIubGVuZ3RoIC0gc3VmZml4TGVuZ3RoKX1gLnN1YnN0cigxKVxuICAgIDogc3RyO1xufVxuXG5cbmNsYXNzIFN1YlByb2Nlc3MgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICBjb25zdHJ1Y3RvciAoY21kLCBhcmdzID0gW10sIG9wdHMgPSB7fSkge1xuICAgIHN1cGVyKCk7XG4gICAgaWYgKCFjbWQpIHRocm93IG5ldyBFcnJvcignQ29tbWFuZCBpcyByZXF1aXJlZCcpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGN1cmx5XG4gICAgaWYgKCFfLmlzU3RyaW5nKGNtZCkpIHRocm93IG5ldyBFcnJvcignQ29tbWFuZCBtdXN0IGJlIGEgc3RyaW5nJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY3VybHlcbiAgICBpZiAoIV8uaXNBcnJheShhcmdzKSkgdGhyb3cgbmV3IEVycm9yKCdBcmdzIG11c3QgYmUgYW4gYXJyYXknKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjdXJseVxuXG4gICAgdGhpcy5jbWQgPSBjbWQ7XG4gICAgdGhpcy5hcmdzID0gYXJncztcbiAgICB0aGlzLnByb2MgPSBudWxsO1xuICAgIHRoaXMub3B0cyA9IG9wdHM7XG4gICAgdGhpcy5leHBlY3RpbmdFeGl0ID0gZmFsc2U7XG5cbiAgICAvLyBnZXQgYSBxdW90ZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbW1hbmQgZm9yIGVycm9yIHN0cmluZ3NcbiAgICB0aGlzLnJlcCA9IHF1b3RlKFtjbWQsIC4uLmFyZ3NdKTtcbiAgfVxuXG4gIGdldCBpc1J1bm5pbmcgKCkge1xuICAgIC8vIHByZXNlbmNlIG9mIGBwcm9jYCBtZWFucyB3ZSBoYXZlIGNvbm5lY3RlZCBhbmQgc3RhcnRlZFxuICAgIHJldHVybiAhIXRoaXMucHJvYztcbiAgfVxuXG4gIGVtaXRMaW5lcyAoc3RyZWFtLCBsaW5lcykge1xuICAgIGZvciAobGV0IGxpbmUgb2YgbGluZXMpIHtcbiAgICAgIHRoaXMuZW1pdCgnc3RyZWFtLWxpbmUnLCBgWyR7c3RyZWFtLnRvVXBwZXJDYXNlKCl9XSAke2xpbmV9YCk7XG4gICAgfVxuICB9XG5cbiAgLy8gc3Bhd24gdGhlIHN1YnByb2Nlc3MgYW5kIHJldHVybiBjb250cm9sIHdoZW5ldmVyIHdlIGRlZW0gdGhhdCBpdCBoYXMgZnVsbHlcbiAgLy8gXCJzdGFydGVkXCJcbiAgYXN5bmMgc3RhcnQgKHN0YXJ0RGV0ZWN0b3IgPSBudWxsLCB0aW1lb3V0TXMgPSBudWxsLCBkZXRhY2ggPSBmYWxzZSkge1xuICAgIGxldCBzdGFydERlbGF5ID0gMTA7XG5cbiAgICBjb25zdCBnZW5lcmljU3RhcnREZXRlY3RvciA9IGZ1bmN0aW9uIGdlbmVyaWNTdGFydERldGVjdG9yIChzdGRvdXQsIHN0ZGVycikge1xuICAgICAgcmV0dXJuIHN0ZG91dCB8fCBzdGRlcnI7XG4gICAgfTtcblxuICAgIC8vIHRoZSBkZWZhdWx0IHN0YXJ0IGRldGVjdG9yIHNpbXBseSByZXR1cm5zIHRydWUgd2hlbiB3ZSBnZXQgYW55IG91dHB1dFxuICAgIGlmIChzdGFydERldGVjdG9yID09PSBudWxsKSB7XG4gICAgICBzdGFydERldGVjdG9yID0gZ2VuZXJpY1N0YXJ0RGV0ZWN0b3I7XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIHVzZXIgcGFzc2VzIGEgbnVtYmVyLCB0aGVuIHdlIHNpbXBseSBkZWxheSBhIGNlcnRhaW4gYW1vdW50IG9mXG4gICAgLy8gdGltZSBiZWZvcmUgcmV0dXJuaW5nIGNvbnRyb2wsIHJhdGhlciB0aGFuIHdhaXRpbmcgZm9yIGEgY29uZGl0aW9uXG4gICAgaWYgKF8uaXNOdW1iZXIoc3RhcnREZXRlY3RvcikpIHtcbiAgICAgIHN0YXJ0RGVsYXkgPSBzdGFydERldGVjdG9yO1xuICAgICAgc3RhcnREZXRlY3RvciA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIHVzZXIgcGFzc2VzIGluIGEgYm9vbGVhbiBhcyBvbmUgb2YgdGhlIGFyZ3VtZW50cywgdXNlIGl0IGZvciBgZGV0YWNoYFxuICAgIGlmIChfLmlzQm9vbGVhbihzdGFydERldGVjdG9yKSAmJiBzdGFydERldGVjdG9yKSB7XG4gICAgICBpZiAoIXRoaXMub3B0cy5kZXRhY2hlZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBkZXRhY2ggcHJvY2VzcyB0aGF0IGlzIG5vdCBzdGFydGVkIHdpdGggJ2RldGFjaGVkJyBvcHRpb25gKTtcbiAgICAgIH1cbiAgICAgIGRldGFjaCA9IHRydWU7XG4gICAgICBzdGFydERldGVjdG9yID0gZ2VuZXJpY1N0YXJ0RGV0ZWN0b3I7XG4gICAgfSBlbHNlIGlmIChfLmlzQm9vbGVhbih0aW1lb3V0TXMpICYmIHRpbWVvdXRNcykge1xuICAgICAgaWYgKCF0aGlzLm9wdHMuZGV0YWNoZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gZGV0YWNoIHByb2Nlc3MgdGhhdCBpcyBub3Qgc3RhcnRlZCB3aXRoICdkZXRhY2hlZCcgb3B0aW9uYCk7XG4gICAgICB9XG4gICAgICBkZXRhY2ggPSB0cnVlO1xuICAgICAgdGltZW91dE1zID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyByZXR1cm4gYSBwcm9taXNlIHNvIHdlIGNhbiB3cmFwIHRoZSBhc3luYyBiZWhhdmlvclxuICAgIHJldHVybiBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAvLyBhY3R1YWxseSBzcGF3biB0aGUgc3VicHJvY1xuICAgICAgdGhpcy5wcm9jID0gc3Bhd24odGhpcy5jbWQsIHRoaXMuYXJncywgdGhpcy5vcHRzKTtcblxuICAgICAgaWYgKHRoaXMucHJvYy5zdGRvdXQpIHtcbiAgICAgICAgdGhpcy5wcm9jLnN0ZG91dC5zZXRFbmNvZGluZyh0aGlzLm9wdHMuZW5jb2RpbmcgfHwgJ3V0ZjgnKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnByb2Muc3RkZXJyKSB7XG4gICAgICAgIHRoaXMucHJvYy5zdGRlcnIuc2V0RW5jb2RpbmcodGhpcy5vcHRzLmVuY29kaW5nIHx8ICd1dGY4Jyk7XG4gICAgICB9XG4gICAgICB0aGlzLmxhc3RMaW5lUG9ydGlvbiA9IHtzdGRvdXQ6ICcnLCBzdGRlcnI6ICcnfTtcblxuICAgICAgLy8gdGhpcyBmdW5jdGlvbiBoYW5kbGVzIG91dHB1dCB0aGF0IHdlIGNvbGxlY3QgZnJvbSB0aGUgc3VicHJvY1xuICAgICAgY29uc3QgaGFuZGxlT3V0cHV0ID0gKHN0cmVhbXMpID0+IHtcbiAgICAgICAgY29uc3Qge3N0ZG91dCwgc3RkZXJyfSA9IHN0cmVhbXM7XG4gICAgICAgIC8vIGlmIHdlIGhhdmUgYSBzdGFydERldGVjdG9yLCBydW4gaXQgb24gdGhlIG91dHB1dCBzbyB3ZSBjYW4gcmVzb2x2ZS9cbiAgICAgICAgLy8gcmVqZWN0IGFuZCBtb3ZlIG9uIGZyb20gc3RhcnRcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAoc3RhcnREZXRlY3RvciAmJiBzdGFydERldGVjdG9yKHN0ZG91dCwgc3RkZXJyKSkge1xuICAgICAgICAgICAgc3RhcnREZXRlY3RvciA9IG51bGw7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZW1pdCB0aGUgYWN0dWFsIG91dHB1dCBmb3Igd2hvbWV2ZXIncyBsaXN0ZW5pbmdcbiAgICAgICAgdGhpcy5lbWl0KCdvdXRwdXQnLCBzdGRvdXQsIHN0ZGVycik7XG5cbiAgICAgICAgLy8gd2UgYWxzbyB3YW50IHRvIGVtaXQgbGluZXMsIGJ1dCBpdCdzIG1vcmUgY29tcGxleCBzaW5jZSBvdXRwdXRcbiAgICAgICAgLy8gY29tZXMgaW4gY2h1bmtzIGFuZCBhIGxpbmUgY291bGQgY29tZSBpbiB0d28gZGlmZmVyZW50IGNodW5rcywgc29cbiAgICAgICAgLy8gd2UgaGF2ZSBsb2dpYyB0byBoYW5kbGUgdGhhdCBjYXNlICh1c2luZyB0aGlzLmxhc3RMaW5lUG9ydGlvbiB0b1xuICAgICAgICAvLyByZW1lbWJlciBhIGxpbmUgdGhhdCBzdGFydGVkIGJ1dCBkaWQgbm90IGZpbmlzaCBpbiB0aGUgbGFzdCBjaHVuaylcbiAgICAgICAgZm9yIChjb25zdCBbc3RyZWFtTmFtZSwgc3RyZWFtRGF0YV0gb2YgXy50b1BhaXJzKHN0cmVhbXMpKSB7XG4gICAgICAgICAgaWYgKCFzdHJlYW1EYXRhKSBjb250aW51ZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjdXJseVxuICAgICAgICAgIGNvbnN0IGxpbmVzID0gc3RyZWFtRGF0YS5zcGxpdCgnXFxuJylcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTI4NjlcbiAgICAgICAgICAgIC5tYXAoKHgpID0+IGAgJHt4fWAuc3Vic3RyKDEpKTtcbiAgICAgICAgICBpZiAobGluZXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgbGluZXNbMF0gPSB0aGlzLmxhc3RMaW5lUG9ydGlvbltzdHJlYW1OYW1lXSArIGxpbmVzWzBdO1xuICAgICAgICAgICAgdGhpcy5sYXN0TGluZVBvcnRpb25bc3RyZWFtTmFtZV0gPSBjdXRTdWZmaXgoXy5sYXN0KGxpbmVzKSwgTUFYX0xJTkVfUE9SVElPTl9MRU5HVEgpO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0TGluZXMgPSBsaW5lcy5zbGljZSgwLCAtMSk7XG4gICAgICAgICAgICB0aGlzLmVtaXQoYGxpbmVzLSR7c3RyZWFtTmFtZX1gLCByZXN1bHRMaW5lcyk7XG4gICAgICAgICAgICB0aGlzLmVtaXRMaW5lcyhzdHJlYW1OYW1lLCByZXN1bHRMaW5lcyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRQb3J0aW9uID0gY3V0U3VmZml4KGxpbmVzWzBdLCBNQVhfTElORV9QT1JUSU9OX0xFTkdUSCk7XG4gICAgICAgICAgICBpZiAodGhpcy5sYXN0TGluZVBvcnRpb25bc3RyZWFtTmFtZV0ubGVuZ3RoICsgY3VycmVudFBvcnRpb24ubGVuZ3RoID4gTUFYX0xJTkVfUE9SVElPTl9MRU5HVEgpIHtcbiAgICAgICAgICAgICAgdGhpcy5sYXN0TGluZVBvcnRpb25bc3RyZWFtTmFtZV0gPSBjdXJyZW50UG9ydGlvbjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMubGFzdExpbmVQb3J0aW9uW3N0cmVhbU5hbWVdICs9IGN1cnJlbnRQb3J0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgLy8gaWYgd2UgZ2V0IGFuIGVycm9yIHNwYXduaW5nIHRoZSBwcm9jLCByZWplY3QgYW5kIGNsZWFuIHVwIHRoZSBwcm9jXG4gICAgICB0aGlzLnByb2Mub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgICB0aGlzLnByb2MucmVtb3ZlQWxsTGlzdGVuZXJzKCdleGl0Jyk7XG4gICAgICAgIHRoaXMucHJvYy5raWxsKCdTSUdJTlQnKTtcblxuICAgICAgICBpZiAoZXJyLmVycm5vID09PSAnRU5PRU5UJykge1xuICAgICAgICAgIGVyciA9IGZvcm1hdEVub2VudChlcnIsIHRoaXMuY21kLCB0aGlzLm9wdHM/LmN3ZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICB9KTtcblxuICAgICAgaWYgKHRoaXMucHJvYy5zdGRvdXQpIHtcbiAgICAgICAgdGhpcy5wcm9jLnN0ZG91dC5vbignZGF0YScsIChjaHVuaykgPT4gaGFuZGxlT3V0cHV0KHtzdGRvdXQ6IGNodW5rLnRvU3RyaW5nKCksIHN0ZGVycjogJyd9KSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnByb2Muc3RkZXJyKSB7XG4gICAgICAgIHRoaXMucHJvYy5zdGRlcnIub24oJ2RhdGEnLCAoY2h1bmspID0+IGhhbmRsZU91dHB1dCh7c3Rkb3V0OiAnJywgc3RkZXJyOiBjaHVuay50b1N0cmluZygpfSkpO1xuICAgICAgfVxuXG4gICAgICAvLyB3aGVuIHRoZSBwcm9jIGV4aXRzLCB3ZSBtaWdodCBzdGlsbCBoYXZlIGEgYnVmZmVyIG9mIGxpbmVzIHdlIHdlcmVcbiAgICAgIC8vIHdhaXRpbmcgb24gbW9yZSBjaHVua3MgdG8gY29tcGxldGUuIEdvIGFoZWFkIGFuZCBlbWl0IHRob3NlLCB0aGVuXG4gICAgICAvLyByZS1lbWl0IHRoZSBleGl0IHNvIGEgbGlzdGVuZXIgY2FuIGhhbmRsZSB0aGUgcG9zc2libHktdW5leHBlY3RlZCBleGl0XG4gICAgICB0aGlzLnByb2Mub24oJ2V4aXQnLCAoY29kZSwgc2lnbmFsKSA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlTGFzdExpbmVzKCk7XG5cbiAgICAgICAgdGhpcy5lbWl0KCdleGl0JywgY29kZSwgc2lnbmFsKTtcblxuICAgICAgICAvLyBpbiBhZGRpdGlvbiB0byB0aGUgYmFyZSBleGl0IGV2ZW50LCBhbHNvIGVtaXQgb25lIG9mIHRocmVlIG90aGVyXG4gICAgICAgIC8vIGV2ZW50cyB0aGF0IGNvbnRhaW4gbW9yZSBoZWxwZnVsIGluZm9ybWF0aW9uOlxuICAgICAgICAvLyAnc3RvcCc6IHdlIHN0b3BwZWQgdGhpc1xuICAgICAgICAvLyAnZGllJzogdGhlIHByb2Nlc3MgZW5kZWQgb3V0IG9mIG91ciBjb250cm9sIHdpdGggYSBub24temVybyBleGl0XG4gICAgICAgIC8vICdlbmQnOiB0aGUgcHJvY2VzcyBlbmRlZCBvdXQgb2Ygb3VyIGNvbnRyb2wgd2l0aCBhIHplcm8gZXhpdFxuICAgICAgICBsZXQgZXZlbnQgPSB0aGlzLmV4cGVjdGluZ0V4aXQgPyAnc3RvcCcgOiAnZGllJztcbiAgICAgICAgaWYgKCF0aGlzLmV4cGVjdGluZ0V4aXQgJiYgY29kZSA9PT0gMCkge1xuICAgICAgICAgIGV2ZW50ID0gJ2VuZCc7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbWl0KGV2ZW50LCBjb2RlLCBzaWduYWwpO1xuXG4gICAgICAgIC8vIGZpbmFsbHkgY2xlYW4gdXAgdGhlIHByb2MgYW5kIG1ha2Ugc3VyZSB0byByZXNldCBvdXIgZXhpdFxuICAgICAgICAvLyBleHBlY3RhdGlvbnNcbiAgICAgICAgdGhpcy5wcm9jID0gbnVsbDtcbiAgICAgICAgdGhpcy5leHBlY3RpbmdFeGl0ID0gZmFsc2U7XG4gICAgICB9KTtcblxuICAgICAgLy8gaWYgdGhlIHVzZXIgaGFzbid0IGdpdmVuIHVzIGEgc3RhcnREZXRlY3RvciwgaW5zdGVhZCBqdXN0IHJlc29sdmVcbiAgICAgIC8vIHdoZW4gc3RhcnREZWxheSBtcyBoYXZlIHBhc3NlZFxuICAgICAgaWYgKCFzdGFydERldGVjdG9yKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyByZXNvbHZlKCk7IH0sIHN0YXJ0RGVsYXkpO1xuICAgICAgfVxuXG4gICAgICAvLyBpZiB0aGUgdXNlciBoYXMgZ2l2ZW4gdXMgYSB0aW1lb3V0LCBzdGFydCB0aGUgY2xvY2sgZm9yIHJlamVjdGluZ1xuICAgICAgLy8gdGhlIHByb21pc2UgaWYgd2UgdGFrZSB0b28gbG9uZyB0byBzdGFydFxuICAgICAgaWYgKF8uaXNOdW1iZXIodGltZW91dE1zKSkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKGBUaGUgcHJvY2VzcyBkaWQgbm90IHN0YXJ0IHdpdGhpbiAke3RpbWVvdXRNc31tcyBgICtcbiAgICAgICAgICAgIGAoY21kOiAnJHt0aGlzLnJlcH0nKWApKTtcbiAgICAgICAgfSwgdGltZW91dE1zKTtcbiAgICAgIH1cbiAgICB9KS5maW5hbGx5KCgpID0+IHtcbiAgICAgIGlmIChkZXRhY2ggJiYgdGhpcy5wcm9jKSB7XG4gICAgICAgIHRoaXMucHJvYy51bnJlZigpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlTGFzdExpbmVzICgpIHtcbiAgICBmb3IgKGxldCBzdHJlYW0gb2YgWydzdGRvdXQnLCAnc3RkZXJyJ10pIHtcbiAgICAgIGlmICh0aGlzLmxhc3RMaW5lUG9ydGlvbltzdHJlYW1dKSB7XG4gICAgICAgIGNvbnN0IGxhc3RMaW5lcyA9IFt0aGlzLmxhc3RMaW5lUG9ydGlvbltzdHJlYW1dXTtcbiAgICAgICAgdGhpcy5lbWl0KGBsaW5lcy0ke3N0cmVhbX1gLCBsYXN0TGluZXMpO1xuICAgICAgICB0aGlzLmVtaXRMaW5lcyhzdHJlYW0sIGxhc3RMaW5lcyk7XG4gICAgICAgIHRoaXMubGFzdExpbmVQb3J0aW9uW3N0cmVhbV0gPSAnJztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBzdG9wIChzaWduYWwgPSAnU0lHVEVSTScsIHRpbWVvdXQgPSAxMDAwMCkge1xuICAgIGlmICghdGhpcy5pc1J1bm5pbmcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2FuJ3Qgc3RvcCBwcm9jZXNzOyBpdCdzIG5vdCBjdXJyZW50bHkgcnVubmluZyAoY21kOiAnJHt0aGlzLnJlcH0nKWApO1xuICAgIH1cbiAgICAvLyBtYWtlIHN1cmUgdG8gZW1pdCBhbnkgZGF0YSBpbiBvdXIgbGluZXMgYnVmZmVyIHdoZW5ldmVyIHdlJ3JlIGRvbmUgd2l0aFxuICAgIC8vIHRoZSBwcm9jXG4gICAgdGhpcy5oYW5kbGVMYXN0TGluZXMoKTtcbiAgICByZXR1cm4gYXdhaXQgbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5wcm9jLm9uKCdjbG9zZScsIHJlc29sdmUpO1xuICAgICAgdGhpcy5leHBlY3RpbmdFeGl0ID0gdHJ1ZTtcbiAgICAgIHRoaXMucHJvYy5raWxsKHNpZ25hbCk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgUHJvY2VzcyBkaWRuJ3QgZW5kIGFmdGVyICR7dGltZW91dH1tcyAoY21kOiAnJHt0aGlzLnJlcH0nKWApKTtcbiAgICAgIH0sIHRpbWVvdXQpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgam9pbiAoYWxsb3dlZEV4aXRDb2RlcyA9IFswXSkge1xuICAgIGlmICghdGhpcy5pc1J1bm5pbmcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGpvaW4gcHJvY2VzczsgaXQgaXMgbm90IGN1cnJlbnRseSBydW5uaW5nIChjbWQ6ICcke3RoaXMucmVwfScpYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMucHJvYy5vbignZXhpdCcsIChjb2RlKSA9PiB7XG4gICAgICAgIGlmIChhbGxvd2VkRXhpdENvZGVzLmluZGV4T2YoY29kZSkgPT09IC0xKSB7XG4gICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgUHJvY2VzcyBlbmRlZCB3aXRoIGV4aXRjb2RlICR7Y29kZX0gKGNtZDogJyR7dGhpcy5yZXB9JylgKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzb2x2ZShjb2RlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKlxuICAgKiBUaGlzIHdpbGwgb25seSB3b3JrIGlmIHRoZSBwcm9jZXNzIGlzIGNyZWF0ZWQgd2l0aCB0aGUgYGRldGFjaGVkYCBvcHRpb25cbiAgICovXG4gIGRldGFjaFByb2Nlc3MgKCkge1xuICAgIGlmICghdGhpcy5vcHRzLmRldGFjaGVkKSB7XG4gICAgICAvLyB0aGlzIG1lYW5zIHRoYXQgdGhlcmUgaXMgYSBtaXNjb25maWd1cmF0aW9uIGluIHRoZSBjYWxsaW5nIGNvZGVcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGRldGFjaCBwcm9jZXNzIHRoYXQgaXMgbm90IHN0YXJ0ZWQgd2l0aCAnZGV0YWNoZWQnIG9wdGlvbmApO1xuICAgIH1cbiAgICBpZiAodGhpcy5wcm9jKSB7XG4gICAgICB0aGlzLnByb2MudW5yZWYoKTtcbiAgICB9XG4gIH1cblxuICBnZXQgcGlkICgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9jID8gdGhpcy5wcm9jLnBpZCA6IG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IHsgU3ViUHJvY2VzcyB9O1xuZXhwb3J0IGRlZmF1bHQgU3ViUHJvY2VzcztcbiJdLCJmaWxlIjoibGliL3N1YnByb2Nlc3MuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
|
package/lib/exec.js
CHANGED
|
@@ -3,9 +3,12 @@
|
|
|
3
3
|
import { spawn } from 'child_process';
|
|
4
4
|
import { quote } from 'shell-quote';
|
|
5
5
|
import B from 'bluebird';
|
|
6
|
+
import _ from 'lodash';
|
|
7
|
+
import { formatEnoent } from './helpers';
|
|
6
8
|
|
|
9
|
+
const MAX_BUFFER_SIZE = 100 * 1024 * 1024;
|
|
7
10
|
|
|
8
|
-
function exec (cmd, args = [], opts = {}) {
|
|
11
|
+
async function exec (cmd, args = [], opts = {}) {
|
|
9
12
|
// get a quoted representation of the command for error strings
|
|
10
13
|
const rep = quote([cmd, ...args]);
|
|
11
14
|
|
|
@@ -18,13 +21,16 @@ function exec (cmd, args = [], opts = {}) {
|
|
|
18
21
|
cwd: undefined,
|
|
19
22
|
env: process.env,
|
|
20
23
|
ignoreOutput: false,
|
|
21
|
-
stdio:
|
|
24
|
+
stdio: 'inherit',
|
|
22
25
|
isBuffer: false,
|
|
23
26
|
shell: undefined,
|
|
27
|
+
logger: undefined,
|
|
28
|
+
maxStdoutBufferSize: MAX_BUFFER_SIZE,
|
|
29
|
+
maxStderrBufferSize: MAX_BUFFER_SIZE,
|
|
24
30
|
}, opts);
|
|
25
31
|
|
|
26
32
|
// this is an async function, so return a promise
|
|
27
|
-
return new B((resolve, reject) => {
|
|
33
|
+
return await new B((resolve, reject) => {
|
|
28
34
|
// spawn the child process with options; we don't currently expose any of
|
|
29
35
|
// the other 'spawn' options through the API
|
|
30
36
|
let proc = spawn(cmd, args, {cwd: opts.cwd, env: opts.env, shell: opts.shell});
|
|
@@ -32,41 +38,54 @@ function exec (cmd, args = [], opts = {}) {
|
|
|
32
38
|
|
|
33
39
|
// if the process errors out, reject the promise
|
|
34
40
|
proc.on('error', (err) => {
|
|
35
|
-
let msg = `Command '${rep}' errored out: ${err.stack}`;
|
|
36
41
|
if (err.errno === 'ENOENT') {
|
|
37
|
-
|
|
42
|
+
err = formatEnoent(err, cmd, opts.cwd);
|
|
38
43
|
}
|
|
39
|
-
reject(
|
|
44
|
+
reject(err);
|
|
40
45
|
});
|
|
41
46
|
if (proc.stdin) {
|
|
42
47
|
proc.stdin.on('error', (err) => {
|
|
43
48
|
reject(new Error(`Standard input '${err.syscall}' error: ${err.stack}`));
|
|
44
49
|
});
|
|
45
50
|
}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
reject(new Error(`Standard error '${err.syscall}' error: ${err.stack}`));
|
|
51
|
+
const handleStream = (streamType, streamProps) => {
|
|
52
|
+
if (!proc[streamType]) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
proc[streamType].on('error', (err) => {
|
|
57
|
+
reject(new Error(`${_.capitalize(streamType)} '${err.syscall}' error: ${err.stack}`));
|
|
54
58
|
});
|
|
55
|
-
}
|
|
56
59
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
stdoutArr.push(data);
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
if (proc.stderr) {
|
|
65
|
-
proc.stderr.on('data', (data) => {
|
|
66
|
-
stderrArr.push(data);
|
|
67
|
-
});
|
|
60
|
+
if (opts.ignoreOutput) {
|
|
61
|
+
// https://github.com/nodejs/node/issues/4236
|
|
62
|
+
proc[streamType].on('data', () => {});
|
|
63
|
+
return;
|
|
68
64
|
}
|
|
69
|
-
|
|
65
|
+
|
|
66
|
+
// keep track of the stream if we don't want to ignore it
|
|
67
|
+
const {chunks, maxSize} = streamProps;
|
|
68
|
+
let size = 0;
|
|
69
|
+
proc[streamType].on('data', (chunk) => {
|
|
70
|
+
chunks.push(chunk);
|
|
71
|
+
size += chunk.length;
|
|
72
|
+
while (chunks.length > 1 && size >= maxSize) {
|
|
73
|
+
size -= chunks[0].length;
|
|
74
|
+
chunks.shift();
|
|
75
|
+
}
|
|
76
|
+
if (opts.logger && _.isFunction(opts.logger.debug)) {
|
|
77
|
+
opts.logger.debug(chunk.toString());
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
};
|
|
81
|
+
handleStream('stdout', {
|
|
82
|
+
maxSize: opts.maxStdoutBufferSize,
|
|
83
|
+
chunks: stdoutArr,
|
|
84
|
+
});
|
|
85
|
+
handleStream('stderr', {
|
|
86
|
+
maxSize: opts.maxStderrBufferSize,
|
|
87
|
+
chunks: stderrArr,
|
|
88
|
+
});
|
|
70
89
|
|
|
71
90
|
function getStdio (isBuffer) {
|
|
72
91
|
let stdout, stderr;
|
package/lib/helpers.js
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import which from 'which';
|
|
2
|
+
import fs from 'fs';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Decorates ENOENT error received from a spawn system call
|
|
6
|
+
* with a more descriptive message, so it could be properly handled by a user.
|
|
7
|
+
*
|
|
8
|
+
* @param {!Error} error Original error instance. !!! The instance is mutated after
|
|
9
|
+
* this helper function invocation
|
|
10
|
+
* @param {!string} cmd Original command to execute
|
|
11
|
+
* @param {?string} cwd Optional path to the current working dir
|
|
12
|
+
* @return {Error} Mutated error instance with an improved description or an
|
|
13
|
+
* unchanged error instance
|
|
14
|
+
*/
|
|
15
|
+
function formatEnoent (error, cmd, cwd = null) {
|
|
16
|
+
try {
|
|
17
|
+
which.sync(cmd);
|
|
18
|
+
if (cwd) {
|
|
19
|
+
try {
|
|
20
|
+
fs.accessSync(cwd, fs.R_OK);
|
|
21
|
+
} catch (ign) {
|
|
22
|
+
error.message = `The current working directory '${cwd}' for '${cmd}' command ` +
|
|
23
|
+
`either does not exist or is not accessible`;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
} catch (ign) {
|
|
27
|
+
error.message = `Command '${cmd}' not found. Is it installed?`;
|
|
28
|
+
}
|
|
29
|
+
return error;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export { formatEnoent };
|
package/lib/subprocess.js
CHANGED
|
@@ -2,11 +2,24 @@
|
|
|
2
2
|
|
|
3
3
|
import { spawn } from 'child_process';
|
|
4
4
|
import events from 'events';
|
|
5
|
-
import through from 'through';
|
|
6
5
|
const { EventEmitter } = events;
|
|
7
6
|
import B from 'bluebird';
|
|
8
7
|
import { quote } from 'shell-quote';
|
|
9
8
|
import _ from 'lodash';
|
|
9
|
+
import { formatEnoent } from './helpers';
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
// This is needed to avoid memory leaks
|
|
13
|
+
// when the process output is too long and contains
|
|
14
|
+
// no line breaks
|
|
15
|
+
const MAX_LINE_PORTION_LENGTH = 0xFFFF;
|
|
16
|
+
|
|
17
|
+
function cutSuffix (str, suffixLength) {
|
|
18
|
+
return str.length > suffixLength
|
|
19
|
+
// https://bugs.chromium.org/p/v8/issues/detail?id=2869
|
|
20
|
+
? ` ${str.substr(str.length - suffixLength)}`.substr(1)
|
|
21
|
+
: str;
|
|
22
|
+
}
|
|
10
23
|
|
|
11
24
|
|
|
12
25
|
class SubProcess extends EventEmitter {
|
|
@@ -87,11 +100,12 @@ class SubProcess extends EventEmitter {
|
|
|
87
100
|
this.lastLinePortion = {stdout: '', stderr: ''};
|
|
88
101
|
|
|
89
102
|
// this function handles output that we collect from the subproc
|
|
90
|
-
const handleOutput = (
|
|
103
|
+
const handleOutput = (streams) => {
|
|
104
|
+
const {stdout, stderr} = streams;
|
|
91
105
|
// if we have a startDetector, run it on the output so we can resolve/
|
|
92
106
|
// reject and move on from start
|
|
93
107
|
try {
|
|
94
|
-
if (startDetector && startDetector(
|
|
108
|
+
if (startDetector && startDetector(stdout, stderr)) {
|
|
95
109
|
startDetector = null;
|
|
96
110
|
resolve();
|
|
97
111
|
}
|
|
@@ -100,48 +114,51 @@ class SubProcess extends EventEmitter {
|
|
|
100
114
|
}
|
|
101
115
|
|
|
102
116
|
// emit the actual output for whomever's listening
|
|
103
|
-
this.emit('output',
|
|
117
|
+
this.emit('output', stdout, stderr);
|
|
104
118
|
|
|
105
119
|
// we also want to emit lines, but it's more complex since output
|
|
106
120
|
// comes in chunks and a line could come in two different chunks, so
|
|
107
121
|
// we have logic to handle that case (using this.lastLinePortion to
|
|
108
122
|
// remember a line that started but did not finish in the last chunk)
|
|
109
|
-
for (const
|
|
110
|
-
if (!
|
|
111
|
-
|
|
123
|
+
for (const [streamName, streamData] of _.toPairs(streams)) {
|
|
124
|
+
if (!streamData) continue; // eslint-disable-line curly
|
|
125
|
+
const lines = streamData.split('\n')
|
|
126
|
+
// https://bugs.chromium.org/p/v8/issues/detail?id=2869
|
|
127
|
+
.map((x) => ` ${x}`.substr(1));
|
|
112
128
|
if (lines.length > 1) {
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
this.emit(`lines-${
|
|
117
|
-
this.emitLines(
|
|
129
|
+
lines[0] = this.lastLinePortion[streamName] + lines[0];
|
|
130
|
+
this.lastLinePortion[streamName] = cutSuffix(_.last(lines), MAX_LINE_PORTION_LENGTH);
|
|
131
|
+
const resultLines = lines.slice(0, -1);
|
|
132
|
+
this.emit(`lines-${streamName}`, resultLines);
|
|
133
|
+
this.emitLines(streamName, resultLines);
|
|
118
134
|
} else {
|
|
119
|
-
|
|
135
|
+
const currentPortion = cutSuffix(lines[0], MAX_LINE_PORTION_LENGTH);
|
|
136
|
+
if (this.lastLinePortion[streamName].length + currentPortion.length > MAX_LINE_PORTION_LENGTH) {
|
|
137
|
+
this.lastLinePortion[streamName] = currentPortion;
|
|
138
|
+
} else {
|
|
139
|
+
this.lastLinePortion[streamName] += currentPortion;
|
|
140
|
+
}
|
|
120
141
|
}
|
|
121
142
|
}
|
|
122
143
|
};
|
|
123
144
|
|
|
124
145
|
// if we get an error spawning the proc, reject and clean up the proc
|
|
125
|
-
this.proc.on('error', err => {
|
|
146
|
+
this.proc.on('error', (err) => {
|
|
126
147
|
this.proc.removeAllListeners('exit');
|
|
127
148
|
this.proc.kill('SIGINT');
|
|
128
149
|
|
|
129
150
|
if (err.errno === 'ENOENT') {
|
|
130
|
-
err =
|
|
151
|
+
err = formatEnoent(err, this.cmd, this.opts?.cwd);
|
|
131
152
|
}
|
|
132
153
|
reject(err);
|
|
133
154
|
});
|
|
134
155
|
|
|
135
156
|
if (this.proc.stdout) {
|
|
136
|
-
this.proc.stdout.
|
|
137
|
-
handleOutput({stdout, stderr: ''});
|
|
138
|
-
}));
|
|
157
|
+
this.proc.stdout.on('data', (chunk) => handleOutput({stdout: chunk.toString(), stderr: ''}));
|
|
139
158
|
}
|
|
140
159
|
|
|
141
160
|
if (this.proc.stderr) {
|
|
142
|
-
this.proc.stderr.
|
|
143
|
-
handleOutput({stdout: '', stderr});
|
|
144
|
-
}));
|
|
161
|
+
this.proc.stderr.on('data', (chunk) => handleOutput({stdout: '', stderr: chunk.toString()}));
|
|
145
162
|
}
|
|
146
163
|
|
|
147
164
|
// when the proc exits, we might still have a buffer of lines we were
|
package/package.json
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"child_process",
|
|
6
6
|
"process management"
|
|
7
7
|
],
|
|
8
|
-
"version": "1.
|
|
8
|
+
"version": "1.16.0",
|
|
9
9
|
"author": "appium",
|
|
10
10
|
"license": "Apache-2.0",
|
|
11
11
|
"repository": {
|
|
@@ -31,12 +31,11 @@
|
|
|
31
31
|
],
|
|
32
32
|
"dependencies": {
|
|
33
33
|
"@babel/runtime": "^7.0.0",
|
|
34
|
-
"appium-support": "^2.0.10",
|
|
35
34
|
"bluebird": "^3.5.1",
|
|
36
35
|
"lodash": "^4.17.4",
|
|
37
36
|
"shell-quote": "^1.4.3",
|
|
38
37
|
"source-map-support": "^0.5.3",
|
|
39
|
-
"
|
|
38
|
+
"which": "^2.0.2"
|
|
40
39
|
},
|
|
41
40
|
"scripts": {
|
|
42
41
|
"clean": "rm -rf node_modules && rm -f package-lock.json && npm install",
|
|
@@ -54,20 +53,12 @@
|
|
|
54
53
|
"precommit-test"
|
|
55
54
|
],
|
|
56
55
|
"devDependencies": {
|
|
57
|
-
"
|
|
58
|
-
"appium-
|
|
59
|
-
"babel-eslint": "^10.0.0",
|
|
56
|
+
"appium-gulp-plugins": "^5.4.1",
|
|
57
|
+
"appium-support": "^2.0.10",
|
|
60
58
|
"chai": "^4.1.2",
|
|
61
59
|
"chai-as-promised": "^7.1.1",
|
|
62
|
-
"eslint": "^
|
|
63
|
-
"eslint-config-appium": "^3.1.0",
|
|
64
|
-
"eslint-plugin-import": "^2.2.0",
|
|
65
|
-
"eslint-plugin-mocha": "^5.0.0",
|
|
66
|
-
"eslint-plugin-promise": "^4.0.0",
|
|
60
|
+
"eslint-config-appium": "^4.0.0",
|
|
67
61
|
"gulp": "^4.0.0",
|
|
68
62
|
"pre-commit": "^1.2.2"
|
|
69
|
-
},
|
|
70
|
-
"greenkeeper": {
|
|
71
|
-
"ignore": []
|
|
72
63
|
}
|
|
73
64
|
}
|