teen_process 1.14.3 → 2.0.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 +5 -2
- package/build/lib/exec.js +47 -32
- package/build/lib/helpers.js +35 -0
- package/build/lib/index.js +34 -0
- package/build/lib/subprocess.js +16 -18
- package/index.js +1 -11
- package/lib/exec.js +119 -33
- package/lib/helpers.js +32 -0
- package/lib/index.js +11 -0
- package/lib/subprocess.js +13 -12
- package/package.json +14 -14
- package/build/index.js +0 -32
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
|
|
@@ -51,6 +49,8 @@ The `exec` function takes some options, with these defaults:
|
|
|
51
49
|
isBuffer: false,
|
|
52
50
|
shell: undefined,
|
|
53
51
|
logger: undefined,
|
|
52
|
+
maxStdoutBufferSize: 100 * 1024 * 1024, // 100 MB
|
|
53
|
+
maxStderrBufferSize: 100 * 1024 * 1024, // 100 MB
|
|
54
54
|
}
|
|
55
55
|
```
|
|
56
56
|
|
|
@@ -58,6 +58,9 @@ Most of these are self-explanatory. `ignoreOutput` is useful if you have a very
|
|
|
58
58
|
chatty process whose output you don't care about and don't want to add it to
|
|
59
59
|
the memory consumed by your program.
|
|
60
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
|
+
|
|
61
64
|
If you're on Windows, you'll want to pass `shell: true`, because `exec`
|
|
62
65
|
actually uses `spawn` under the hood, and is therefore subject to the issues
|
|
63
66
|
noted about Windows + `spawn` in [the Node
|
package/build/lib/exec.js
CHANGED
|
@@ -5,8 +5,8 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
exports.exec = exec;
|
|
9
8
|
exports.default = void 0;
|
|
9
|
+
exports.exec = exec;
|
|
10
10
|
|
|
11
11
|
require("source-map-support/register");
|
|
12
12
|
|
|
@@ -18,6 +18,10 @@ var _bluebird = _interopRequireDefault(require("bluebird"));
|
|
|
18
18
|
|
|
19
19
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
20
20
|
|
|
21
|
+
var _helpers = require("./helpers");
|
|
22
|
+
|
|
23
|
+
const MAX_BUFFER_SIZE = 100 * 1024 * 1024;
|
|
24
|
+
|
|
21
25
|
async function exec(cmd, args = [], opts = {}) {
|
|
22
26
|
const rep = (0, _shellQuote.quote)([cmd, ...args]);
|
|
23
27
|
opts = Object.assign({
|
|
@@ -30,7 +34,9 @@ async function exec(cmd, args = [], opts = {}) {
|
|
|
30
34
|
stdio: 'inherit',
|
|
31
35
|
isBuffer: false,
|
|
32
36
|
shell: undefined,
|
|
33
|
-
logger: undefined
|
|
37
|
+
logger: undefined,
|
|
38
|
+
maxStdoutBufferSize: MAX_BUFFER_SIZE,
|
|
39
|
+
maxStderrBufferSize: MAX_BUFFER_SIZE
|
|
34
40
|
}, opts);
|
|
35
41
|
return await new _bluebird.default((resolve, reject) => {
|
|
36
42
|
let proc = (0, _child_process.spawn)(cmd, args, {
|
|
@@ -42,13 +48,11 @@ async function exec(cmd, args = [], opts = {}) {
|
|
|
42
48
|
stderrArr = [],
|
|
43
49
|
timer = null;
|
|
44
50
|
proc.on('error', err => {
|
|
45
|
-
let msg = `Command '${rep}' errored out: ${err.stack}`;
|
|
46
|
-
|
|
47
51
|
if (err.errno === 'ENOENT') {
|
|
48
|
-
|
|
52
|
+
err = (0, _helpers.formatEnoent)(err, cmd, opts.cwd);
|
|
49
53
|
}
|
|
50
54
|
|
|
51
|
-
reject(
|
|
55
|
+
reject(err);
|
|
52
56
|
});
|
|
53
57
|
|
|
54
58
|
if (proc.stdin) {
|
|
@@ -57,37 +61,48 @@ async function exec(cmd, args = [], opts = {}) {
|
|
|
57
61
|
});
|
|
58
62
|
}
|
|
59
63
|
|
|
60
|
-
|
|
61
|
-
proc
|
|
62
|
-
|
|
63
|
-
}
|
|
64
|
+
const handleStream = (streamType, streamProps) => {
|
|
65
|
+
if (!proc[streamType]) {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
64
68
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
69
|
+
proc[streamType].on('error', err => {
|
|
70
|
+
reject(new Error(`${_lodash.default.capitalize(streamType)} '${err.syscall}' error: ${err.stack}`));
|
|
71
|
+
});
|
|
68
72
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
});
|
|
73
|
+
if (opts.ignoreOutput) {
|
|
74
|
+
proc[streamType].on('data', () => {});
|
|
75
|
+
return;
|
|
73
76
|
}
|
|
74
|
-
}
|
|
75
77
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
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
|
+
}
|
|
79
95
|
});
|
|
96
|
+
};
|
|
80
97
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
}
|
|
90
|
-
}
|
|
98
|
+
handleStream('stdout', {
|
|
99
|
+
maxSize: opts.maxStdoutBufferSize,
|
|
100
|
+
chunks: stdoutArr
|
|
101
|
+
});
|
|
102
|
+
handleStream('stderr', {
|
|
103
|
+
maxSize: opts.maxStderrBufferSize,
|
|
104
|
+
chunks: stderrArr
|
|
105
|
+
});
|
|
91
106
|
|
|
92
107
|
function getStdio(isBuffer) {
|
|
93
108
|
let stdout, stderr;
|
|
@@ -156,4 +171,4 @@ var _default = exec;
|
|
|
156
171
|
exports.default = _default;require('source-map-support').install();
|
|
157
172
|
|
|
158
173
|
|
|
159
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9leGVjLmpzIl0sIm5hbWVzIjpbImV4ZWMiLCJjbWQiLCJhcmdzIiwib3B0cyIsInJlcCIsIk9iamVjdCIsImFzc2lnbiIsInRpbWVvdXQiLCJlbmNvZGluZyIsImtpbGxTaWduYWwiLCJjd2QiLCJ1bmRlZmluZWQiLCJlbnYiLCJwcm9jZXNzIiwiaWdub3JlT3V0cHV0Iiwic3RkaW8iLCJpc0J1ZmZlciIsInNoZWxsIiwibG9nZ2VyIiwiQiIsInJlc29sdmUiLCJyZWplY3QiLCJwcm9jIiwic3Rkb3V0QXJyIiwic3RkZXJyQXJyIiwidGltZXIiLCJvbiIsImVyciIsIm1zZyIsInN0YWNrIiwiZXJybm8iLCJFcnJvciIsInN0ZGluIiwic3lzY2FsbCIsInN0ZG91dCIsImRhdGEiLCJwdXNoIiwiXyIsImlzRnVuY3Rpb24iLCJkZWJ1ZyIsInN0ZGVyciIsImVycm9yIiwiZ2V0U3RkaW8iLCJCdWZmZXIiLCJjb25jYXQiLCJ0b1N0cmluZyIsImNvZGUiLCJjbGVhclRpbWVvdXQiLCJzZXRUaW1lb3V0Iiwia2lsbCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0EsZUFBZUEsSUFBZixDQUFxQkMsR0FBckIsRUFBMEJDLElBQUksR0FBRyxFQUFqQyxFQUFxQ0MsSUFBSSxHQUFHLEVBQTVDLEVBQWdEO0FBRTlDLFFBQU1DLEdBQUcsR0FBRyx1QkFBTSxDQUFDSCxHQUFELEVBQU0sR0FBR0MsSUFBVCxDQUFOLENBQVo7QUFJQUMsRUFBQUEsSUFBSSxHQUFHRSxNQUFNLENBQUNDLE1BQVAsQ0FBYztBQUNuQkMsSUFBQUEsT0FBTyxFQUFFLElBRFU7QUFFbkJDLElBQUFBLFFBQVEsRUFBRSxNQUZTO0FBR25CQyxJQUFBQSxVQUFVLEVBQUUsU0FITztBQUluQkMsSUFBQUEsR0FBRyxFQUFFQyxTQUpjO0FBS25CQyxJQUFBQSxHQUFHLEVBQUVDLE9BQU8sQ0FBQ0QsR0FMTTtBQU1uQkUsSUFBQUEsWUFBWSxFQUFF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QVNEO0FBQ0YsR0EzRlksQ0FBYjtBQTRGRDs7ZUFHY1AsSSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIHByb21pc2UvcHJlZmVyLWF3YWl0LXRvLWNhbGxiYWNrcyAqL1xuXG5pbXBvcnQgeyBzcGF3biB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgcXVvdGUgfSBmcm9tICdzaGVsbC1xdW90ZSc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuXG5cbmFzeW5jIGZ1bmN0aW9uIGV4ZWMgKGNtZCwgYXJncyA9IFtdLCBvcHRzID0ge30pIHtcbiAgLy8gZ2V0IGEgcXVvdGVkIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb21tYW5kIGZvciBlcnJvciBzdHJpbmdzXG4gIGNvbnN0IHJlcCA9IHF1b3RlKFtjbWQsIC4uLmFyZ3NdKTtcblxuICAvLyBleHRlbmQgZGVmYXVsdCBvcHRpb25zOyB3ZSdyZSBiYXNpY2FsbHkgcmUtaW1wbGVtZW50aW5nIGV4ZWMncyBvcHRpb25zXG4gIC8vIGZvciB1c2UgaGVyZSB3aXRoIHNwYXduIHVuZGVyIHRoZSBob29kXG4gIG9wdHMgPSBPYmplY3QuYXNzaWduKHtcbiAgICB0aW1lb3V0OiBudWxsLFxuICAgIGVuY29kaW5nOiAndXRmOCcsXG4gICAga2lsbFNpZ25hbDogJ1NJR1RFUk0nLFxuICAgIGN3ZDogdW5kZWZpbmVkLFxuICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgaWdub3JlT3V0cHV0OiBmYWxzZSxcbiAgICBzdGRpbzogJ2luaGVyaXQnLFxuICAgIGlzQnVmZmVyOiBmYWxzZSxcbiAgICBzaGVsbDogdW5kZWZpbmVkLFxuICAgIGxvZ2dlcjogdW5kZWZpbmVkLFxuICB9LCBvcHRzKTtcblxuICAvLyB0aGlzIGlzIGFuIGFzeW5jIGZ1bmN0aW9uLCBzbyByZXR1cm4gYSBwcm9taXNlXG4gIHJldHVybiBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgLy8gc3Bhd24gdGhlIGNoaWxkIHByb2Nlc3Mgd2l0aCBvcHRpb25zOyB3ZSBkb24ndCBjdXJyZW50bHkgZXhwb3NlIGFueSBvZlxuICAgIC8vIHRoZSBvdGhlciAnc3Bhd24nIG9wdGlvbnMgdGhyb3VnaCB0aGUgQVBJXG4gICAgbGV0IHByb2MgPSBzcGF3bihjbWQsIGFyZ3MsIHtjd2Q6IG9wdHMuY3dkLCBlbnY6IG9wdHMuZW52LCBzaGVsbDogb3B0cy5zaGVsbH0pO1xuICAgIGxldCBzdGRvdXRBcnIgPSBbXSwgc3RkZXJyQXJyID0gW10sIHRpbWVyID0gbnVsbDtcblxuICAgIC8vIGlmIHRoZSBwcm9jZXNzIGVycm9ycyBvdXQsIHJlamVjdCB0aGUgcHJvbWlzZVxuICAgIHByb2Mub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgbGV0IG1zZyA9IGBDb21tYW5kICcke3JlcH0nIGVycm9yZWQgb3V0OiAke2Vyci5zdGFja31gO1xuICAgICAgaWYgKGVyci5lcnJubyA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgbXNnID0gYENvbW1hbmQgJyR7Y21kfScgbm90IGZvdW5kLiBJcyBpdCBpbnN0YWxsZWQ/YDtcbiAgICAgIH1cbiAgICAgIHJlamVjdChuZXcgRXJyb3IobXNnKSk7XG4gICAgfSk7XG4gICAgaWYgKHByb2Muc3RkaW4pIHtcbiAgICAgIHByb2Muc3RkaW4ub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgICByZWplY3QobmV3IEVycm9yKGBTdGFuZGFyZCBpbnB1dCAnJHtlcnIuc3lzY2FsbH0nIGVycm9yOiAke2Vyci5zdGFja31gKSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHByb2Muc3Rkb3V0KSB7XG4gICAgICBwcm9jLnN0ZG91dC5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoYFN0YW5kYXJkIG91dHB1dCAnJHtlcnIuc3lzY2FsbH0nIGVycm9yOiAke2Vyci5zdGFja31gKSk7XG4gICAgICB9KTtcbiAgICAgIC8vIGtlZXAgdHJhY2sgb2Ygc3Rkb3V0IGlmIHdlIGhhdmUgbm90IHNhaWQgbm90IHRvXG4gICAgICBpZiAoIW9wdHMuaWdub3JlT3V0cHV0KSB7XG4gICAgICAgIHByb2Muc3Rkb3V0Lm9uKCdkYXRhJywgKGRhdGEpID0+IHtcbiAgICAgICAgICBzdGRvdXRBcnIucHVzaChkYXRhKTtcbiAgICAgICAgICBpZiAob3B0cy5sb2dnZXIgJiYgXy5pc0Z1bmN0aW9uKG9wdHMubG9nZ2VyLmRlYnVnKSkge1xuICAgICAgICAgICAgb3B0cy5sb2dnZXIuZGVidWcoZGF0YSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHByb2Muc3RkZXJyKSB7XG4gICAgICBwcm9jLnN0ZGVyci5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoYFN0YW5kYXJkIGVycm9yICcke2Vyci5zeXNjYWxsfScgZXJyb3I6ICR7ZXJyLnN0YWNrfWApKTtcbiAgICAgIH0pO1xuICAgICAgLy8ga2VlcCB0cmFjayBvZiBzdGRlcnIgaWYgd2UgaGF2ZSBub3Qgc2FpZCBub3QgdG9cbiAgICAgIGlmICghb3B0cy5pZ25vcmVPdXRwdXQpIHtcbiAgICAgICAgcHJvYy5zdGRlcnIub24oJ2RhdGEnLCAoZGF0YSkgPT4ge1xuICAgICAgICAgIHN0ZGVyckFyci5wdXNoKGRhdGEpO1xuICAgICAgICAgIGlmIChvcHRzLmxvZ2dlciAmJiBfLmlzRnVuY3Rpb24ob3B0cy5sb2dnZXIuZXJyb3IpKSB7XG4gICAgICAgICAgICBvcHRzLmxvZ2dlci5lcnJvcihkYXRhKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFN0ZGlvIChpc0J1ZmZlcikge1xuICAgICAgbGV0IHN0ZG91dCwgc3RkZXJyO1xuICAgICAgaWYgKGlzQnVmZmVyKSB7XG4gICAgICAgIHN0ZG91dCA9IEJ1ZmZlci5jb25jYXQoc3Rkb3V0QXJyKTtcbiAgICAgICAgc3RkZXJyID0gQnVmZmVyLmNvbmNhdChzdGRlcnJBcnIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3Rkb3V0ID0gQnVmZmVyLmNvbmNhdChzdGRvdXRBcnIpLnRvU3RyaW5nKG9wdHMuZW5jb2RpbmcpO1xuICAgICAgICBzdGRlcnIgPSBCdWZmZXIuY29uY2F0KHN0ZGVyckFycikudG9TdHJpbmcob3B0cy5lbmNvZGluZyk7XG4gICAgICB9XG4gICAgICByZXR1cm4ge3N0ZG91dCwgc3RkZXJyfTtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgcHJvY2VzcyBlbmRzLCBlaXRoZXIgcmVzb2x2ZSBvciByZWplY3QgdGhlIHByb21pc2UgYmFzZWQgb24gdGhlXG4gICAgLy8gZXhpdCBjb2RlIG9mIHRoZSBwcm9jZXNzLiBlaXRoZXIgd2F5LCBhdHRhY2ggc3Rkb3V0LCBzdGRlcnIsIGFuZCBjb2RlLlxuICAgIC8vIEFsc28gY2xlYW4gdXAgdGhlIHRpbWVyIGlmIGl0IGV4aXN0c1xuICAgIHByb2Mub24oJ2Nsb3NlJywgKGNvZGUpID0+IHtcbiAgICAgIGlmICh0aW1lcikge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgfVxuICAgICAgbGV0IHtzdGRvdXQsIHN0ZGVycn0gPSBnZXRTdGRpbyhvcHRzLmlzQnVmZmVyKTtcbiAgICAgIGlmIChjb2RlID09PSAwKSB7XG4gICAgICAgIHJlc29sdmUoe3N0ZG91dCwgc3RkZXJyLCBjb2RlfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgZXJyID0gbmV3IEVycm9yKGBDb21tYW5kICcke3JlcH0nIGV4aXRlZCB3aXRoIGNvZGUgJHtjb2RlfWApO1xuICAgICAgICBlcnIgPSBPYmplY3QuYXNzaWduKGVyciwge3N0ZG91dCwgc3RkZXJyLCBjb2RlfSk7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gaWYgd2Ugc2V0IGEgdGltZW91dCBvbiB0aGUgY2hpbGQgcHJvY2VzcywgY3V0IGludG8gdGhlIGV4ZWN1dGlvbiBhbmRcbiAgICAvLyByZWplY3QgaWYgdGhlIHRpbWVvdXQgaXMgcmVhY2hlZC4gQXR0YWNoIHRoZSBzdGRvdXQvc3RkZXJyIHdlIGN1cnJlbnRseVxuICAgIC8vIGhhdmUgaW4gY2FzZSBpdCdzIGhlbHBmdWwgaW4gZGVidWdnaW5nXG4gICAgaWYgKG9wdHMudGltZW91dCkge1xuICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgbGV0IHtzdGRvdXQsIHN0ZGVycn0gPSBnZXRTdGRpbyhvcHRzLmlzQnVmZmVyKTtcbiAgICAgICAgbGV0IGVyciA9IG5ldyBFcnJvcihgQ29tbWFuZCAnJHtyZXB9JyB0aW1lZCBvdXQgYWZ0ZXIgJHtvcHRzLnRpbWVvdXR9bXNgKTtcbiAgICAgICAgZXJyID0gT2JqZWN0LmFzc2lnbihlcnIsIHtzdGRvdXQsIHN0ZGVyciwgY29kZTogbnVsbH0pO1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgLy8gcmVqZWN0IGFuZCBUSEVOIGtpbGwgdG8gYXZvaWQgcmFjZSBjb25kaXRpb25zIHdpdGggdGhlIGhhbmRsZXJzXG4gICAgICAgIC8vIGFib3ZlXG4gICAgICAgIHByb2Mua2lsbChvcHRzLmtpbGxTaWduYWwpO1xuICAgICAgfSwgb3B0cy50aW1lb3V0KTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgeyBleGVjIH07XG5leHBvcnQgZGVmYXVsdCBleGVjO1xuIl0sImZpbGUiOiJsaWIvZXhlYy5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9
|
|
174
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2V4ZWMuanMiLCJuYW1lcyI6WyJNQVhfQlVGRkVSX1NJWkUiLCJleGVjIiwiY21kIiwiYXJncyIsIm9wdHMiLCJyZXAiLCJxdW90ZSIsIk9iamVjdCIsImFzc2lnbiIsInRpbWVvdXQiLCJlbmNvZGluZyIsImtpbGxTaWduYWwiLCJjd2QiLCJ1bmRlZmluZWQiLCJlbnYiLCJwcm9jZXNzIiwiaWdub3JlT3V0cHV0Iiwic3RkaW8iLCJpc0J1ZmZlciIsInNoZWxsIiwibG9nZ2VyIiwibWF4U3Rkb3V0QnVmZmVyU2l6ZSIsIm1heFN0ZGVyckJ1ZmZlclNpemUiLCJCIiwicmVzb2x2ZSIsInJlamVjdCIsInByb2MiLCJzcGF3biIsInN0ZG91dEFyciIsInN0ZGVyckFyciIsInRpbWVyIiwib24iLCJlcnIiLCJlcnJubyIsImZvcm1hdEVub2VudCIsInN0ZGluIiwiRXJyb3IiLCJzeXNjYWxsIiwic3RhY2siLCJoYW5kbGVTdHJlYW0iLCJzdHJlYW1UeXBlIiwic3RyZWFtUHJvcHMiLCJfIiwiY2FwaXRhbGl6ZSIsImNodW5rcyIsIm1heFNpemUiLCJzaXplIiwiY2h1bmsiLCJwdXNoIiwibGVuZ3RoIiwic2hpZnQiLCJpc0Z1bmN0aW9uIiwiZGVidWciLCJ0b1N0cmluZyIsImdldFN0ZGlvIiwic3Rkb3V0Iiwic3RkZXJyIiwiQnVmZmVyIiwiY29uY2F0IiwiY29kZSIsImNsZWFyVGltZW91dCIsInNldFRpbWVvdXQiLCJraWxsIl0sInNvdXJjZVJvb3QiOiIuLi8uLiIsInNvdXJjZXMiOlsibGliL2V4ZWMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbi8qIGVzbGludC1kaXNhYmxlIHByb21pc2UvcHJlZmVyLWF3YWl0LXRvLWNhbGxiYWNrcyAqL1xuXG5pbXBvcnQgeyBzcGF3biB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgcXVvdGUgfSBmcm9tICdzaGVsbC1xdW90ZSc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZm9ybWF0RW5vZW50IH0gZnJvbSAnLi9oZWxwZXJzJztcblxuY29uc3QgTUFYX0JVRkZFUl9TSVpFID0gMTAwICogMTAyNCAqIDEwMjQ7XG5cbi8qKlxuICogU3Bhd25zIGEgcHJvY2Vzc1xuICogQHRlbXBsYXRlIHtUZWVuUHJvY2Vzc0V4ZWNPcHRpb25zfSBUXG4gKiBAcGFyYW0ge3N0cmluZ30gY21kIC0gUHJvZ3JhbSB0byBleGVjdXRlXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBbYXJnc10gLSBBcmd1bWVudHMgdG8gcGFzcyB0byB0aGUgcHJvZ3JhbVxuICogQHBhcmFtIHtUfSBbb3B0c10gLSBPcHRpb25zXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxCdWZmZXJQcm9wPFQ+IGV4dGVuZHMgdHJ1ZSA/IFRlZW5Qcm9jZXNzRXhlY0J1ZmZlclJlc3VsdCA6IFRlZW5Qcm9jZXNzRXhlY1N0cmluZ1Jlc3VsdD59XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGV4ZWMgKGNtZCwgYXJncyA9IFtdLCBvcHRzID0gLyoqIEB0eXBlIHtUfSAqLyh7fSkpIHtcbiAgLy8gZ2V0IGEgcXVvdGVkIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb21tYW5kIGZvciBlcnJvciBzdHJpbmdzXG4gIGNvbnN0IHJlcCA9IHF1b3RlKFtjbWQsIC4uLmFyZ3NdKTtcblxuICAvLyBleHRlbmQgZGVmYXVsdCBvcHRpb25zOyB3ZSdyZSBiYXNpY2FsbHkgcmUtaW1wbGVtZW50aW5nIGV4ZWMncyBvcHRpb25zXG4gIC8vIGZvciB1c2UgaGVyZSB3aXRoIHNwYXduIHVuZGVyIHRoZSBob29kXG4gIG9wdHMgPSBPYmplY3QuYXNzaWduKHtcbiAgICB0aW1lb3V0OiBudWxsLFxuICAgIGVuY29kaW5nOiAndXRmOCcsXG4gICAga2lsbFNpZ25hbDogJ1NJR1RFUk0nLFxuICAgIGN3ZDogdW5kZWZpbmVkLFxuICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgaWdub3JlT3V0cHV0OiBmYWxzZSxcbiAgICBzdGRpbzogJ2luaGVyaXQnLFxuICAgIGlzQnVmZmVyOiBmYWxzZSxcbiAgICBzaGVsbDogdW5kZWZpbmVkLFxuICAgIGxvZ2dlcjogdW5kZWZpbmVkLFxuICAgIG1heFN0ZG91dEJ1ZmZlclNpemU6IE1BWF9CVUZGRVJfU0laRSxcbiAgICBtYXhTdGRlcnJCdWZmZXJTaXplOiBNQVhfQlVGRkVSX1NJWkUsXG4gIH0sIG9wdHMpO1xuXG4gIC8vIHRoaXMgaXMgYW4gYXN5bmMgZnVuY3Rpb24sIHNvIHJldHVybiBhIHByb21pc2VcbiAgcmV0dXJuIGF3YWl0IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAvLyBzcGF3biB0aGUgY2hpbGQgcHJvY2VzcyB3aXRoIG9wdGlvbnM7IHdlIGRvbid0IGN1cnJlbnRseSBleHBvc2UgYW55IG9mXG4gICAgLy8gdGhlIG90aGVyICdzcGF3bicgb3B0aW9ucyB0aHJvdWdoIHRoZSBBUElcbiAgICBsZXQgcHJvYyA9IHNwYXduKGNtZCwgYXJncywge2N3ZDogb3B0cy5jd2QsIGVudjogb3B0cy5lbnYsIHNoZWxsOiBvcHRzLnNoZWxsfSk7XG4gICAgbGV0IHN0ZG91dEFyciA9IFtdLCBzdGRlcnJBcnIgPSBbXSwgdGltZXIgPSBudWxsO1xuXG4gICAgLy8gaWYgdGhlIHByb2Nlc3MgZXJyb3JzIG91dCwgcmVqZWN0IHRoZSBwcm9taXNlXG4gICAgcHJvYy5vbignZXJyb3InLCAvKiogQHBhcmFtIHtOb2RlSlMuRXJybm9FeGNlcHRpb259IGVyciAqLyhlcnIpID0+IHtcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGlmIChlcnIuZXJybm8gPT09ICdFTk9FTlQnKSB7XG4gICAgICAgIGVyciA9IGZvcm1hdEVub2VudChlcnIsIGNtZCwgb3B0cy5jd2QpO1xuICAgICAgfVxuICAgICAgcmVqZWN0KGVycik7XG4gICAgfSk7XG4gICAgaWYgKHByb2Muc3RkaW4pIHtcbiAgICAgIHByb2Muc3RkaW4ub24oJ2Vycm9yJywgLyoqIEBwYXJhbSB7Tm9kZUpTLkVycm5vRXhjZXB0aW9ufSBlcnIgKi8oZXJyKSA9PiB7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoYFN0YW5kYXJkIGlucHV0ICcke2Vyci5zeXNjYWxsfScgZXJyb3I6ICR7ZXJyLnN0YWNrfWApKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCBoYW5kbGVTdHJlYW0gPSAoc3RyZWFtVHlwZSwgc3RyZWFtUHJvcHMpID0+IHtcbiAgICAgIGlmICghcHJvY1tzdHJlYW1UeXBlXSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHByb2Nbc3RyZWFtVHlwZV0ub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgICByZWplY3QobmV3IEVycm9yKGAke18uY2FwaXRhbGl6ZShzdHJlYW1UeXBlKX0gJyR7ZXJyLnN5c2NhbGx9JyBlcnJvcjogJHtlcnIuc3RhY2t9YCkpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChvcHRzLmlnbm9yZU91dHB1dCkge1xuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvaXNzdWVzLzQyMzZcbiAgICAgICAgcHJvY1tzdHJlYW1UeXBlXS5vbignZGF0YScsICgpID0+IHt9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBrZWVwIHRyYWNrIG9mIHRoZSBzdHJlYW0gaWYgd2UgZG9uJ3Qgd2FudCB0byBpZ25vcmUgaXRcbiAgICAgIGNvbnN0IHtjaHVua3MsIG1heFNpemV9ID0gc3RyZWFtUHJvcHM7XG4gICAgICBsZXQgc2l6ZSA9IDA7XG4gICAgICBwcm9jW3N0cmVhbVR5cGVdLm9uKCdkYXRhJywgKGNodW5rKSA9PiB7XG4gICAgICAgIGNodW5rcy5wdXNoKGNodW5rKTtcbiAgICAgICAgc2l6ZSArPSBjaHVuay5sZW5ndGg7XG4gICAgICAgIHdoaWxlIChjaHVua3MubGVuZ3RoID4gMSAmJiBzaXplID49IG1heFNpemUpIHtcbiAgICAgICAgICBzaXplIC09IGNodW5rc1swXS5sZW5ndGg7XG4gICAgICAgICAgY2h1bmtzLnNoaWZ0KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdHMubG9nZ2VyICYmIF8uaXNGdW5jdGlvbihvcHRzLmxvZ2dlci5kZWJ1ZykpIHtcbiAgICAgICAgICBvcHRzLmxvZ2dlci5kZWJ1ZyhjaHVuay50b1N0cmluZygpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBoYW5kbGVTdHJlYW0oJ3N0ZG91dCcsIHtcbiAgICAgIG1heFNpemU6IG9wdHMubWF4U3Rkb3V0QnVmZmVyU2l6ZSxcbiAgICAgIGNodW5rczogc3Rkb3V0QXJyLFxuICAgIH0pO1xuICAgIGhhbmRsZVN0cmVhbSgnc3RkZXJyJywge1xuICAgICAgbWF4U2l6ZTogb3B0cy5tYXhTdGRlcnJCdWZmZXJTaXplLFxuICAgICAgY2h1bmtzOiBzdGRlcnJBcnIsXG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBAdGVtcGxhdGUge2Jvb2xlYW59IFVcbiAgICAgKiBAcGFyYW0ge1V9IGlzQnVmZmVyXG4gICAgICogQHJldHVybnMge1UgZXh0ZW5kcyB0cnVlID8ge3N0ZG91dDogQnVmZmVyLCBzdGRlcnI6IEJ1ZmZlcn0gOiB7c3Rkb3V0OiBzdHJpbmcsIHN0ZGVycjogc3RyaW5nfX1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRTdGRpbyAoaXNCdWZmZXIpIHtcbiAgICAgIGxldCBzdGRvdXQsIHN0ZGVycjtcbiAgICAgIGlmIChpc0J1ZmZlcikge1xuICAgICAgICBzdGRvdXQgPSBCdWZmZXIuY29uY2F0KHN0ZG91dEFycik7XG4gICAgICAgIHN0ZGVyciA9IEJ1ZmZlci5jb25jYXQoc3RkZXJyQXJyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0ZG91dCA9IEJ1ZmZlci5jb25jYXQoc3Rkb3V0QXJyKS50b1N0cmluZyhvcHRzLmVuY29kaW5nKTtcbiAgICAgICAgc3RkZXJyID0gQnVmZmVyLmNvbmNhdChzdGRlcnJBcnIpLnRvU3RyaW5nKG9wdHMuZW5jb2RpbmcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIC8qKiBAdHlwZSB7VSBleHRlbmRzIHRydWUgPyB7c3Rkb3V0OiBCdWZmZXIsIHN0ZGVycjogQnVmZmVyfSA6IHtzdGRvdXQ6IHN0cmluZywgc3RkZXJyOiBzdHJpbmd9fSAqLyh7c3Rkb3V0LCBzdGRlcnJ9KTtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgcHJvY2VzcyBlbmRzLCBlaXRoZXIgcmVzb2x2ZSBvciByZWplY3QgdGhlIHByb21pc2UgYmFzZWQgb24gdGhlXG4gICAgLy8gZXhpdCBjb2RlIG9mIHRoZSBwcm9jZXNzLiBlaXRoZXIgd2F5LCBhdHRhY2ggc3Rkb3V0LCBzdGRlcnIsIGFuZCBjb2RlLlxuICAgIC8vIEFsc28gY2xlYW4gdXAgdGhlIHRpbWVyIGlmIGl0IGV4aXN0c1xuICAgIHByb2Mub24oJ2Nsb3NlJywgKGNvZGUpID0+IHtcbiAgICAgIGlmICh0aW1lcikge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgfVxuICAgICAgbGV0IHtzdGRvdXQsIHN0ZGVycn0gPSBnZXRTdGRpbyhvcHRzLmlzQnVmZmVyKTtcbiAgICAgIGlmIChjb2RlID09PSAwKSB7XG4gICAgICAgIHJlc29sdmUoLyoqIEB0eXBlIHtCdWZmZXJQcm9wPFQ+IGV4dGVuZHMgdHJ1ZSA/IFRlZW5Qcm9jZXNzRXhlY0J1ZmZlclJlc3VsdCA6IFRlZW5Qcm9jZXNzRXhlY1N0cmluZ1Jlc3VsdH0gKi8oe3N0ZG91dCwgc3RkZXJyLCBjb2RlfSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IGVyciA9IG5ldyBFcnJvcihgQ29tbWFuZCAnJHtyZXB9JyBleGl0ZWQgd2l0aCBjb2RlICR7Y29kZX1gKTtcbiAgICAgICAgZXJyID0gT2JqZWN0LmFzc2lnbihlcnIsIHtzdGRvdXQsIHN0ZGVyciwgY29kZX0pO1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIGlmIHdlIHNldCBhIHRpbWVvdXQgb24gdGhlIGNoaWxkIHByb2Nlc3MsIGN1dCBpbnRvIHRoZSBleGVjdXRpb24gYW5kXG4gICAgLy8gcmVqZWN0IGlmIHRoZSB0aW1lb3V0IGlzIHJlYWNoZWQuIEF0dGFjaCB0aGUgc3Rkb3V0L3N0ZGVyciB3ZSBjdXJyZW50bHlcbiAgICAvLyBoYXZlIGluIGNhc2UgaXQncyBoZWxwZnVsIGluIGRlYnVnZ2luZ1xuICAgIGlmIChvcHRzLnRpbWVvdXQpIHtcbiAgICAgIHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGxldCB7c3Rkb3V0LCBzdGRlcnJ9ID0gZ2V0U3RkaW8ob3B0cy5pc0J1ZmZlcik7XG4gICAgICAgIGxldCBlcnIgPSBuZXcgRXJyb3IoYENvbW1hbmQgJyR7cmVwfScgdGltZWQgb3V0IGFmdGVyICR7b3B0cy50aW1lb3V0fW1zYCk7XG4gICAgICAgIGVyciA9IE9iamVjdC5hc3NpZ24oZXJyLCB7c3Rkb3V0LCBzdGRlcnIsIGNvZGU6IG51bGx9KTtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIC8vIHJlamVjdCBhbmQgVEhFTiBraWxsIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucyB3aXRoIHRoZSBoYW5kbGVyc1xuICAgICAgICAvLyBhYm92ZVxuICAgICAgICBwcm9jLmtpbGwob3B0cy5raWxsU2lnbmFsKTtcbiAgICAgIH0sIG9wdHMudGltZW91dCk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IHsgZXhlYyB9O1xuZXhwb3J0IGRlZmF1bHQgZXhlYztcblxuLyoqXG4gKiBPcHRpb25zIG9uIHRvcCBvZiBgU3Bhd25PcHRpb25zYCwgdW5pcXVlIHRvIGB0ZWVuX3Byb2Nlc3MuYFxuICogQHR5cGVkZWYge09iamVjdH0gVGVlblByb2Nlc3NQcm9wc1xuICogQHByb3BlcnR5IHtib29sZWFufSBbaWdub3JlT3V0cHV0XSAtIElnbm9yZSAmIGRpc2NhcmQgYWxsIG91dHB1dFxuICogQHByb3BlcnR5IHtib29sZWFufSBbaXNCdWZmZXJdIC0gUmV0dXJuIG91dHB1dCBhcyBhIEJ1ZmZlclxuICogQHByb3BlcnR5IHtUZWVuUHJvY2Vzc0xvZ2dlcn0gW2xvZ2dlcl0gLSBMb2dnZXIgdG8gdXNlIGZvciBkZWJ1Z2dpbmdcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbbWF4U3Rkb3V0QnVmZmVyU2l6ZV0gLSBNYXhpbXVtIHNpemUgb2YgYHN0ZG91dGAgYnVmZmVyXG4gKiBAcHJvcGVydHkge251bWJlcn0gW21heFN0ZGVyckJ1ZmZlclNpemVdIC0gTWF4aW11bSBzaXplIG9mIGBzdGRlcnJgIGJ1ZmZlclxuICogQHByb3BlcnR5IHtCdWZmZXJFbmNvZGluZ30gW2VuY29kaW5nPSd1dGY4J10gLSBFbmNvZGluZyB0byB1c2UgZm9yIG91dHB1dFxuICovXG5cbi8qKlxuICogQSBsb2dnZXIgb2JqZWN0IHVuZGVyc3Rvb2QgYnkge0BsaW5rIGV4ZWMgdGVlbl9wcm9jZXNzLmV4ZWN9LlxuICogQHR5cGVkZWYge09iamVjdH0gVGVlblByb2Nlc3NMb2dnZXJcbiAqIEBwcm9wZXJ0eSB7KC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkfSBkZWJ1Z1xuICovXG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIGV4ZWMgdGVlbl9wcm9jZXNzLmV4ZWN9LlxuICogQHR5cGVkZWYge2ltcG9ydCgnY2hpbGRfcHJvY2VzcycpLlNwYXduT3B0aW9ucyAmIFRlZW5Qcm9jZXNzUHJvcHN9IFRlZW5Qcm9jZXNzRXhlY09wdGlvbnNcbiAqL1xuXG4vKipcbiAqIFRoZSB2YWx1ZSB7QGxpbmsgZXhlYyB0ZWVuX3Byb2Nlc3MuZXhlY30gcmVzb2x2ZXMgdG8gd2hlbiBgaXNCdWZmZXJgIGlzIGBmYWxzZWBcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFRlZW5Qcm9jZXNzRXhlY1N0cmluZ1Jlc3VsdFxuICogQHByb3BlcnR5IHtzdHJpbmd9IHN0ZG91dCAtIFN0ZG91dFxuICogQHByb3BlcnR5IHtzdHJpbmd9IHN0ZGVyciAtIFN0ZGVyclxuICogQHByb3BlcnR5IHtudW1iZXI/fSBjb2RlIC0gRXhpdCBjb2RlXG4gKi9cblxuLyoqXG4gKiBUaGUgdmFsdWUge0BsaW5rIGV4ZWMgdGVlbl9wcm9jZXNzLmV4ZWN9IHJlc29sdmVzIHRvIHdoZW4gYGlzQnVmZmVyYCBpcyBgdHJ1ZWBcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFRlZW5Qcm9jZXNzRXhlY0J1ZmZlclJlc3VsdFxuICogQHByb3BlcnR5IHtCdWZmZXJ9IHN0ZG91dCAtIFN0ZG91dFxuICogQHByb3BlcnR5IHtCdWZmZXJ9IHN0ZGVyciAtIFN0ZGVyclxuICogQHByb3BlcnR5IHtudW1iZXI/fSBjb2RlIC0gRXhpdCBjb2RlXG4gKi9cblxuLyoqXG4gKiBFeHRyYSBwcm9wcyB7QGxpbmsgZXhlYyB0ZWVuX3Byb2Nlc3MuZXhlY30gYWRkcyB0byBpdHMgZXJyb3Igb2JqZWN0c1xuICogQHR5cGVkZWYge09iamVjdH0gVGVlblByb2Nlc3NFeGVjRXJyb3JQcm9wc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IHN0ZG91dCAtIFNURE9VVFxuICogQHByb3BlcnR5IHtzdHJpbmd9IHN0ZGVyciAtIFNUREVSUlxuICogQHByb3BlcnR5IHtudW1iZXI/fSBjb2RlIC0gRXhpdCBjb2RlXG4gKi9cblxuLyoqXG4gKiBFcnJvciB0aHJvd24gYnkge0BsaW5rIGV4ZWMgdGVlbl9wcm9jZXNzLmV4ZWN9XG4gKiBAdHlwZWRlZiB7RXJyb3IgJiBUZWVuUHJvY2Vzc0V4ZWNFcnJvclByb3BzfSBUZWVuUHJvY2Vzc0V4ZWNFcnJvclxuICovXG5cbi8qKlxuICogQHRlbXBsYXRlIHt7aXNCdWZmZXI/OiBib29sZWFufX0gTWF5YmVCdWZmZXJcbiAqIEB0eXBlZGVmIHtNYXliZUJ1ZmZlclsnaXNCdWZmZXInXX0gQnVmZmVyUHJvcFxuICogQHByaXZhdGVcbiAqL1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFJQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxlQUFlLEdBQUcsTUFBTSxJQUFOLEdBQWEsSUFB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
|
|
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2hlbHBlcnMuanMiLCJuYW1lcyI6WyJmb3JtYXRFbm9lbnQiLCJlcnJvciIsImNtZCIsImN3ZCIsIndoaWNoIiwic3luYyIsImZzIiwiYWNjZXNzU3luYyIsIlJfT0siLCJpZ24iLCJtZXNzYWdlIl0sInNvdXJjZVJvb3QiOiIuLi8uLiIsInNvdXJjZXMiOlsibGliL2hlbHBlcnMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHdoaWNoIGZyb20gJ3doaWNoJztcbmltcG9ydCBmcyBmcm9tICdmcyc7XG5cbi8qKlxuICogRGVjb3JhdGVzIEVOT0VOVCBlcnJvciByZWNlaXZlZCBmcm9tIGEgc3Bhd24gc3lzdGVtIGNhbGxcbiAqIHdpdGggYSBtb3JlIGRlc2NyaXB0aXZlIG1lc3NhZ2UsIHNvIGl0IGNvdWxkIGJlIHByb3Blcmx5IGhhbmRsZWQgYnkgYSB1c2VyLlxuICpcbiAqIEBwYXJhbSB7Tm9kZUpTLkVycm5vRXhjZXB0aW9ufSBlcnJvciBPcmlnaW5hbCBlcnJvciBpbnN0YW5jZS4gISEhIFRoZSBpbnN0YW5jZSBpcyBtdXRhdGVkIGFmdGVyXG4gKiB0aGlzIGhlbHBlciBmdW5jdGlvbiBpbnZvY2F0aW9uXG4gKiBAcGFyYW0ge3N0cmluZ30gY21kIE9yaWdpbmFsIGNvbW1hbmQgdG8gZXhlY3V0ZVxuICogQHBhcmFtIHtzdHJpbmd8VVJMP30gW2N3ZF0gT3B0aW9uYWwgcGF0aCB0byB0aGUgY3VycmVudCB3b3JraW5nIGRpclxuICogQHJldHVybnMge05vZGVKUy5FcnJub0V4Y2VwdGlvbn0gTXV0YXRlZCBlcnJvciBpbnN0YW5jZSB3aXRoIGFuIGltcHJvdmVkIGRlc2NyaXB0aW9uIG9yIGFuXG4gKiB1bmNoYW5nZWQgZXJyb3IgaW5zdGFuY2VcbiAqL1xuZnVuY3Rpb24gZm9ybWF0RW5vZW50IChlcnJvciwgY21kLCBjd2QgPSBudWxsKSB7XG4gIHRyeSB7XG4gICAgd2hpY2guc3luYyhjbWQpO1xuICAgIGlmIChjd2QpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZzLmFjY2Vzc1N5bmMoY3dkLCBmcy5SX09LKTtcbiAgICAgIH0gY2F0Y2ggKGlnbikge1xuICAgICAgICBlcnJvci5tZXNzYWdlID0gYFRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5ICcke2N3ZH0nIGZvciAnJHtjbWR9JyBjb21tYW5kIGAgK1xuICAgICAgICAgIGBlaXRoZXIgZG9lcyBub3QgZXhpc3Qgb3IgaXMgbm90IGFjY2Vzc2libGVgO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAoaWduKSB7XG4gICAgZXJyb3IubWVzc2FnZSA9IGBDb21tYW5kICcke2NtZH0nIG5vdCBmb3VuZC4gSXMgaXQgaW5zdGFsbGVkP2A7XG4gIH1cbiAgcmV0dXJuIGVycm9yO1xufVxuXG5leHBvcnQgeyBmb3JtYXRFbm9lbnQgfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFhQSxTQUFTQSxZQUFULENBQXVCQyxLQUF2QixFQUE4QkMsR0FBOUIsRUFBbUNDLEdBQUcsR0FBRyxJQUF6QyxFQUErQztFQUM3QyxJQUFJO0lBQ0ZDLGNBQUEsQ0FBTUMsSUFBTixDQUFXSCxHQUFYOztJQUNBLElBQUlDLEdBQUosRUFBUztNQUNQLElBQUk7UUFDRkcsV0FBQSxDQUFHQyxVQUFILENBQWNKLEdBQWQsRUFBbUJHLFdBQUEsQ0FBR0UsSUFBdEI7TUFDRCxDQUZELENBRUUsT0FBT0MsR0FBUCxFQUFZO1FBQ1pSLEtBQUssQ0FBQ1MsT0FBTixHQUFpQixrQ0FBaUNQLEdBQUksVUFBU0QsR0FBSSxZQUFuRCxHQUNiLDRDQURIO01BRUQ7SUFDRjtFQUNGLENBVkQsQ0FVRSxPQUFPTyxHQUFQLEVBQVk7SUFDWlIsS0FBSyxDQUFDUyxPQUFOLEdBQWlCLFlBQVdSLEdBQUksK0JBQWhDO0VBQ0Q7O0VBQ0QsT0FBT0QsS0FBUDtBQUNEIn0=
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.spawn = exports.exec = exports.SubProcess = void 0;
|
|
7
|
+
|
|
8
|
+
require("source-map-support/register");
|
|
9
|
+
|
|
10
|
+
var cp = _interopRequireWildcard(require("child_process"));
|
|
11
|
+
|
|
12
|
+
var spIndex = _interopRequireWildcard(require("./subprocess"));
|
|
13
|
+
|
|
14
|
+
var execIndex = _interopRequireWildcard(require("./exec"));
|
|
15
|
+
|
|
16
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
17
|
+
|
|
18
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
19
|
+
|
|
20
|
+
const {
|
|
21
|
+
spawn
|
|
22
|
+
} = cp;
|
|
23
|
+
exports.spawn = spawn;
|
|
24
|
+
const {
|
|
25
|
+
SubProcess
|
|
26
|
+
} = spIndex;
|
|
27
|
+
exports.SubProcess = SubProcess;
|
|
28
|
+
const {
|
|
29
|
+
exec
|
|
30
|
+
} = execIndex;
|
|
31
|
+
exports.exec = exec;require('source-map-support').install();
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2luZGV4LmpzIiwibmFtZXMiOlsic3Bhd24iLCJjcCIsIlN1YlByb2Nlc3MiLCJzcEluZGV4IiwiZXhlYyIsImV4ZWNJbmRleCJdLCJzb3VyY2VSb290IjoiLi4vLi4iLCJzb3VyY2VzIjpbImxpYi9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyB0cmFuc3BpbGU6bWFpblxuaW1wb3J0ICogYXMgY3AgZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgKiBhcyBzcEluZGV4IGZyb20gJy4vc3VicHJvY2Vzcyc7XG5pbXBvcnQgKiBhcyBleGVjSW5kZXggZnJvbSAnLi9leGVjJztcblxuXG5jb25zdCB7IHNwYXduIH0gPSBjcDtcbmNvbnN0IHsgU3ViUHJvY2VzcyB9ID0gc3BJbmRleDtcbmNvbnN0IHsgZXhlYyB9ID0gZXhlY0luZGV4O1xuXG5leHBvcnQgeyBleGVjLCBzcGF3biwgU3ViUHJvY2VzcyB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7O0FBR0EsTUFBTTtFQUFFQTtBQUFGLElBQVlDLEVBQWxCOztBQUNBLE1BQU07RUFBRUM7QUFBRixJQUFpQkMsT0FBdkI7O0FBQ0EsTUFBTTtFQUFFQztBQUFGLElBQVdDLFNBQWpCIn0=
|
package/build/lib/subprocess.js
CHANGED
|
@@ -13,14 +13,14 @@ 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;
|
|
@@ -102,9 +102,7 @@ class SubProcess extends EventEmitter {
|
|
|
102
102
|
stderr: ''
|
|
103
103
|
};
|
|
104
104
|
|
|
105
|
-
const handleOutput =
|
|
106
|
-
const streams = _lodash.default.cloneDeep(data);
|
|
107
|
-
|
|
105
|
+
const handleOutput = streams => {
|
|
108
106
|
const {
|
|
109
107
|
stdout,
|
|
110
108
|
stderr
|
|
@@ -148,27 +146,27 @@ class SubProcess extends EventEmitter {
|
|
|
148
146
|
this.proc.kill('SIGINT');
|
|
149
147
|
|
|
150
148
|
if (err.errno === 'ENOENT') {
|
|
151
|
-
|
|
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);
|
|
152
152
|
}
|
|
153
153
|
|
|
154
154
|
reject(err);
|
|
155
|
+
this.proc.unref();
|
|
156
|
+
this.proc = null;
|
|
155
157
|
});
|
|
156
158
|
|
|
157
159
|
if (this.proc.stdout) {
|
|
158
|
-
this.proc.stdout.
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
stderr: ''
|
|
162
|
-
});
|
|
160
|
+
this.proc.stdout.on('data', chunk => handleOutput({
|
|
161
|
+
stdout: chunk.toString(),
|
|
162
|
+
stderr: ''
|
|
163
163
|
}));
|
|
164
164
|
}
|
|
165
165
|
|
|
166
166
|
if (this.proc.stderr) {
|
|
167
|
-
this.proc.stderr.
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
stderr
|
|
171
|
-
});
|
|
167
|
+
this.proc.stderr.on('data', chunk => handleOutput({
|
|
168
|
+
stdout: '',
|
|
169
|
+
stderr: chunk.toString()
|
|
172
170
|
}));
|
|
173
171
|
}
|
|
174
172
|
|
|
@@ -227,7 +225,7 @@ class SubProcess extends EventEmitter {
|
|
|
227
225
|
this.proc.kill(signal);
|
|
228
226
|
setTimeout(() => {
|
|
229
227
|
reject(new Error(`Process didn't end after ${timeout}ms (cmd: '${this.rep}')`));
|
|
230
|
-
}, timeout);
|
|
228
|
+
}, timeout).unref();
|
|
231
229
|
});
|
|
232
230
|
}
|
|
233
231
|
|
|
@@ -268,4 +266,4 @@ var _default = SubProcess;
|
|
|
268
266
|
exports.default = _default;require('source-map-support').install();
|
|
269
267
|
|
|
270
268
|
|
|
271
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9zdWJwcm9jZXNzLmpzIl0sIm5hbWVzIjpbIkV2ZW50RW1pdHRlciIsImV2ZW50cyIsIk1BWF9MSU5FX1BPUlRJT05fTEVOR1RIIiwiY3V0U3VmZml4Iiwic3RyIiwic3VmZml4TGVuZ3RoIiwibGVuZ3RoIiwic3Vic3RyIiwiU3ViUHJvY2VzcyIsImNvbnN0cnVjdG9yIiwiY21kIiwiYXJncyIsIm9wdHMiLCJFcnJvciIsIl8iLCJpc1N0cmluZyIsImlzQXJyYXkiLCJwcm9jIiwiZXhwZWN0aW5nRXhpdCIsInJlcCIsImlzUnVubmluZyIsImVtaXRMaW5lcyIsInN0cmVhbSIsImxpbmVzIiwibGluZSIsImVtaXQiLCJ0b1VwcGVyQ2FzZSIsInN0YXJ0Iiwic3RhcnREZXRlY3RvciIsInRpbWVvdXRNcyIsImRldGFjaCIsInN0YXJ0RGVsYXkiLCJnZW5lcmljU3RhcnREZXRlY3RvciIsInN0ZG91dCIsInN0ZGVyciIsImlzTnVtYmVyIiwiaXNCb29sZWFuIiwiZGV0YWNoZWQiLCJCIiwicmVzb2x2ZSIsInJlamVjdCIsInNldEVuY29kaW5nIiwiZW5jb2RpbmciLCJsYXN0TGluZVBvcnRpb24iLCJoYW5kbGVPdXRwdXQiLCJkYXRhIiwic3RyZWFtcyIsImNsb25lRGVlcCIsImUiLCJzdHJlYW1OYW1lIiwic3RyZWFtRGF0YSIsInRvUGFpcnMiLCJzcGxpdCIsIm1hcCIsIngiLCJsYXN0IiwicmVzdWx0TGluZXMiLCJzbGljZSIsImN1cnJlbnRQb3J0aW9uIiwib24iLCJlcnIiLCJyZW1vdmVBbGxMaXN0ZW5lcnMiLCJraWxsIiwiZXJybm8iLCJwaXBlIiwiY29kZSIsInNpZ25hbCIsImhhbmRsZUxhc3RMaW5lcyIsImV2ZW50Iiwic2V0VGltZW91dCIsImZpbmFsbHkiLCJ1bnJlZiIsImxhc3RMaW5lcyIsInN0b3AiLCJ0aW1lb3V0Iiwiam9pbiIsImFsbG93ZWRFeGl0Q29kZXMiLCJpbmRleE9mIiwiZGV0YWNoUHJvY2VzcyIsInBpZCJdLCJtYXBw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b0M7QUFDbEMsUUFBSSxDQUFDLEtBQUt4RCxTQUFWLEVBQXFCO0FBQ25CLFlBQU0sSUFBSVAsS0FBSixDQUFXLDJEQUEwRCxLQUFLTSxHQUFJLElBQTlFLENBQU47QUFDRDs7QUFFRCxXQUFPLE1BQU0sSUFBSW1CLGlCQUFKLENBQU0sQ0FBQ0MsT0FBRCxFQUFVQyxNQUFWLEtBQXFCO0FBQ3RDLFdBQUt2QixJQUFMLENBQVUwQyxFQUFWLENBQWEsTUFBYixFQUFzQk0sSUFBRCxJQUFVO0FBQzdCLFlBQUlXLGdCQUFnQixDQUFDQyxPQUFqQixDQUF5QlosSUFBekIsTUFBbUMsQ0FBQyxDQUF4QyxFQUEyQztBQUN6Q3pCLFVBQUFBLE1BQU0sQ0FBQyxJQUFJM0IsS0FBSixDQUFXLCtCQUE4Qm9ELElBQUssV0FBVSxLQUFLOUMsR0FBSSxJQUFqRSxDQUFELENBQU47QUFDRCxTQUZELE1BRU87QUFDTG9CLFVBQUFBLE9BQU8sQ0FBQzBCLElBQUQsQ0FBUDtBQUNEO0FBQ0YsT0FORDtBQU9ELEtBUlksQ0FBYjtBQVNEOztBQUtEYSxFQUFBQSxhQUFhLEdBQUk7QUFDZixRQUFJLENBQUMsS0FBS2xFLElBQUwsQ0FBVXlCLFFBQWYsRUFBeUI7QUFFdkIsWUFBTSxJQUFJeEIsS0FBSixDQUFXLHFFQUFYLENBQU47QUFDRDs7QUFDRCxRQUFJLEtBQUtJLElBQVQsRUFBZTtBQUNiLFdBQUtBLElBQUwsQ0FBVXNELEtBQVY7QUFDRDtBQUNGOztBQUVELE1BQUlRLEdBQUosR0FBVztBQUNULFdBQU8sS0FBSzlELElBQUwsR0FBWSxLQUFLQSxJQUFMLENBQVU4RCxHQUF0QixHQUE0QixJQUFuQztBQUNEOztBQXpQbUM7OztlQTZQdkJ2RSxVIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgcHJvbWlzZS9wcmVmZXItYXdhaXQtdG8tY2FsbGJhY2tzICovXG5cbmltcG9ydCB7IHNwYXduIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgZXZlbnRzIGZyb20gJ2V2ZW50cyc7XG5pbXBvcnQgdGhyb3VnaCBmcm9tICd0aHJvdWdoJztcbmNvbnN0IHsgRXZlbnRFbWl0dGVyIH0gPSBldmVudHM7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgeyBxdW90ZSB9IGZyb20gJ3NoZWxsLXF1b3RlJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5cbi8vIFRoaXMgaXMgbmVlZGVkIHRvIGF2b2lkIG1lbW9yeSBsZWFrc1xuLy8gd2hlbiB0aGUgcHJvY2VzcyBvdXRwdXQgaXMgdG9vIGxvbmcgYW5kIGNvbnRhaW5zXG4vLyBubyBsaW5lIGJyZWFrc1xuY29uc3QgTUFYX0xJTkVfUE9SVElPTl9MRU5HVEggPSAweEZGRkY7XG5cbmZ1bmN0aW9uIGN1dFN1ZmZpeCAoc3RyLCBzdWZmaXhMZW5ndGgpIHtcbiAgcmV0dXJuIHN0ci5sZW5ndGggPiBzdWZmaXhMZW5ndGhcbiAgICAvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0yODY5XG4gICAgPyBgICR7c3RyLnN1YnN0cihzdHIubGVuZ3RoIC0gc3VmZml4TGVuZ3RoKX1gLnN1YnN0cigxKVxuICAgIDogc3RyO1xufVxuXG5cbmNsYXNzIFN1YlByb2Nlc3MgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICBjb25zdHJ1Y3RvciAoY21kLCBhcmdzID0gW10sIG9wdHMgPSB7fSkge1xuICAgIHN1cGVyKCk7XG4gICAgaWYgKCFjbWQpIHRocm93IG5ldyBFcnJvcignQ29tbWFuZCBpcyByZXF1aXJlZCcpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGN1cmx5XG4gICAgaWYgKCFfLmlzU3RyaW5nKGNtZCkpIHRocm93IG5ldyBFcnJvcignQ29tbWFuZCBtdXN0IGJlIGEgc3RyaW5nJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY3VybHlcbiAgICBpZiAoIV8uaXNBcnJheShhcmdzKSkgdGhyb3cgbmV3IEVycm9yKCdBcmdzIG11c3QgYmUgYW4gYXJyYXknKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjdXJseVxuXG4gICAgdGhpcy5jbWQgPSBjbWQ7XG4gICAgdGhpcy5hcmdzID0gYXJncztcbiAgICB0aGlzLnByb2MgPSBudWxsO1xuICAgIHRoaXMub3B0cyA9IG9wdHM7XG4gICAgdGhpcy5leHBlY3RpbmdFeGl0ID0gZmFsc2U7XG5cbiAgICAvLyBnZXQgYSBxdW90ZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbW1hbmQgZm9yIGVycm9yIHN0cmluZ3NcbiAgICB0aGlzLnJlcCA9IHF1b3RlKFtjbWQsIC4uLmFyZ3NdKTtcbiAgfVxuXG4gIGdldCBpc1J1bm5pbmcgKCkge1xuICAgIC8vIHByZXNlbmNlIG9mIGBwcm9jYCBtZWFucyB3ZSBoYXZlIGNvbm5lY3RlZCBhbmQgc3RhcnRlZFxuICAgIHJldHVybiAhIXRoaXMucHJvYztcbiAgfVxuXG4gIGVtaXRMaW5lcyAoc3RyZWFtLCBsaW5lcykge1xuICAgIGZvciAobGV0IGxpbmUgb2YgbGluZXMpIHtcbiAgICAgIHRoaXMuZW1pdCgnc3RyZWFtLWxpbmUnLCBgWyR7c3RyZWFtLnRvVXBwZXJDYXNlKCl9XSAke2xpbmV9YCk7XG4gICAgfVxuICB9XG5cbiAgLy8gc3Bhd24gdGhlIHN1YnByb2Nlc3MgYW5kIHJldHVybiBjb250cm9sIHdoZW5ldmVyIHdlIGRlZW0gdGhhdCBpdCBoYXMgZnVsbHlcbiAgLy8gXCJzdGFydGVkXCJcbiAgYXN5bmMgc3RhcnQgKHN0YXJ0RGV0ZWN0b3IgPSBudWxsLCB0aW1lb3V0TXMgPSBudWxsLCBkZXRhY2ggPSBmYWxzZSkge1xuICAgIGxldCBzdGFydERlbGF5ID0gMTA7XG5cbiAgICBjb25zdCBnZW5lcmljU3RhcnREZXRlY3RvciA9IGZ1bmN0aW9uIGdlbmVyaWNTdGFydERldGVjdG9yIChzdGRvdXQsIHN0ZGVycikge1xuICAgICAgcmV0dXJuIHN0ZG91dCB8fCBzdGRlcnI7XG4gICAgfTtcblxuICAgIC8vIHRoZSBkZWZhdWx0IHN0YXJ0IGRldGVjdG9yIHNpbXBseSByZXR1cm5zIHRydWUgd2hlbiB3ZSBnZXQgYW55IG91dHB1dFxuICAgIGlmIChzdGFydERldGVjdG9yID09PSBudWxsKSB7XG4gICAgICBzdGFydERldGVjdG9yID0gZ2VuZXJpY1N0YXJ0RGV0ZWN0b3I7XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIHVzZXIgcGFzc2VzIGEgbnVtYmVyLCB0aGVuIHdlIHNpbXBseSBkZWxheSBhIGNlcnRhaW4gYW1vdW50IG9mXG4gICAgLy8gdGltZSBiZWZvcmUgcmV0dXJuaW5nIGNvbnRyb2wsIHJhdGhlciB0aGFuIHdhaXRpbmcgZm9yIGEgY29uZGl0aW9uXG4gICAgaWYgKF8uaXNOdW1iZXIoc3RhcnREZXRlY3RvcikpIHtcbiAgICAgIHN0YXJ0RGVsYXkgPSBzdGFydERldGVjdG9yO1xuICAgICAgc3RhcnREZXRlY3RvciA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIHVzZXIgcGFzc2VzIGluIGEgYm9vbGVhbiBhcyBvbmUgb2YgdGhlIGFyZ3VtZW50cywgdXNlIGl0IGZvciBgZGV0YWNoYFxuICAgIGlmIChfLmlzQm9vbGVhbihzdGFydERldGVjdG9yKSAmJiBzdGFydERldGVjdG9yKSB7XG4gICAgICBpZiAoIXRoaXMub3B0cy5kZXRhY2hlZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBkZXRhY2ggcHJvY2VzcyB0aGF0IGlzIG5vdCBzdGFydGVkIHdpdGggJ2RldGFjaGVkJyBvcHRpb25gKTtcbiAgICAgIH1cbiAgICAgIGRldGFjaCA9IHRydWU7XG4gICAgICBzdGFydERldGVjdG9yID0gZ2VuZXJpY1N0YXJ0RGV0ZWN0b3I7XG4gICAgfSBlbHNlIGlmIChfLmlzQm9vbGVhbih0aW1lb3V0TXMpICYmIHRpbWVvdXRNcykge1xuICAgICAgaWYgKCF0aGlzLm9wdHMuZGV0YWNoZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gZGV0YWNoIHByb2Nlc3MgdGhhdCBpcyBub3Qgc3RhcnRlZCB3aXRoICdkZXRhY2hlZCcgb3B0aW9uYCk7XG4gICAgICB9XG4gICAgICBkZXRhY2ggPSB0cnVlO1xuICAgICAgdGltZW91dE1zID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyByZXR1cm4gYSBwcm9taXNlIHNvIHdlIGNhbiB3cmFwIHRoZSBhc3luYyBiZWhhdmlvclxuICAgIHJldHVybiBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAvLyBhY3R1YWxseSBzcGF3biB0aGUgc3VicHJvY1xuICAgICAgdGhpcy5wcm9jID0gc3Bhd24odGhpcy5jbWQsIHRoaXMuYXJncywgdGhpcy5vcHRzKTtcblxuICAgICAgaWYgKHRoaXMucHJvYy5zdGRvdXQpIHtcbiAgICAgICAgdGhpcy5wcm9jLnN0ZG91dC5zZXRFbmNvZGluZyh0aGlzLm9wdHMuZW5jb2RpbmcgfHwgJ3V0ZjgnKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnByb2Muc3RkZXJyKSB7XG4gICAgICAgIHRoaXMucHJvYy5zdGRlcnIuc2V0RW5jb2RpbmcodGhpcy5vcHRzLmVuY29kaW5nIHx8ICd1dGY4Jyk7XG4gICAgICB9XG4gICAgICB0aGlzLmxhc3RMaW5lUG9ydGlvbiA9IHtzdGRvdXQ6ICcnLCBzdGRlcnI6ICcnfTtcblxuICAgICAgLy8gdGhpcyBmdW5jdGlvbiBoYW5kbGVzIG91dHB1dCB0aGF0IHdlIGNvbGxlY3QgZnJvbSB0aGUgc3VicHJvY1xuICAgICAgY29uc3QgaGFuZGxlT3V0cHV0ID0gKGRhdGEpID0+IHtcbiAgICAgICAgY29uc3Qgc3RyZWFtcyA9IF8uY2xvbmVEZWVwKGRhdGEpO1xuICAgICAgICBjb25zdCB7c3Rkb3V0LCBzdGRlcnJ9ID0gc3RyZWFtcztcbiAgICAgICAgLy8gaWYgd2UgaGF2ZSBhIHN0YXJ0RGV0ZWN0b3IsIHJ1biBpdCBvbiB0aGUgb3V0cHV0IHNvIHdlIGNhbiByZXNvbHZlL1xuICAgICAgICAvLyByZWplY3QgYW5kIG1vdmUgb24gZnJvbSBzdGFydFxuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmIChzdGFydERldGVjdG9yICYmIHN0YXJ0RGV0ZWN0b3Ioc3Rkb3V0LCBzdGRlcnIpKSB7XG4gICAgICAgICAgICBzdGFydERldGVjdG9yID0gbnVsbDtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBlbWl0IHRoZSBhY3R1YWwgb3V0cHV0IGZvciB3aG9tZXZlcidzIGxpc3RlbmluZ1xuICAgICAgICB0aGlzLmVtaXQoJ291dHB1dCcsIHN0ZG91dCwgc3RkZXJyKTtcblxuICAgICAgICAvLyB3ZSBhbHNvIHdhbnQgdG8gZW1pdCBsaW5lcywgYnV0IGl0J3MgbW9yZSBjb21wbGV4IHNpbmNlIG91dHB1dFxuICAgICAgICAvLyBjb21lcyBpbiBjaHVua3MgYW5kIGEgbGluZSBjb3VsZCBjb21lIGluIHR3byBkaWZmZXJlbnQgY2h1bmtzLCBzb1xuICAgICAgICAvLyB3ZSBoYXZlIGxvZ2ljIHRvIGhhbmRsZSB0aGF0IGNhc2UgKHVzaW5nIHRoaXMubGFzdExpbmVQb3J0aW9uIHRvXG4gICAgICAgIC8vIHJlbWVtYmVyIGEgbGluZSB0aGF0IHN0YXJ0ZWQgYnV0IGRpZCBub3QgZmluaXNoIGluIHRoZSBsYXN0IGNodW5rKVxuICAgICAgICBmb3IgKGNvbnN0IFtzdHJlYW1OYW1lLCBzdHJlYW1EYXRhXSBvZiBfLnRvUGFpcnMoc3RyZWFtcykpIHtcbiAgICAgICAgICBpZiAoIXN0cmVhbURhdGEpIGNvbnRpbnVlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGN1cmx5XG4gICAgICAgICAgY29uc3QgbGluZXMgPSBzdHJlYW1EYXRhLnNwbGl0KCdcXG4nKVxuICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9Mjg2OVxuICAgICAgICAgICAgLm1hcCgoeCkgPT4gYCAke3h9YC5zdWJzdHIoMSkpO1xuICAgICAgICAgIGlmIChsaW5lcy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBsaW5lc1swXSA9IHRoaXMubGFzdExpbmVQb3J0aW9uW3N0cmVhbU5hbWVdICsgbGluZXNbMF07XG4gICAgICAgICAgICB0aGlzLmxhc3RMaW5lUG9ydGlvbltzdHJlYW1OYW1lXSA9IGN1dFN1ZmZpeChfLmxhc3QobGluZXMpLCBNQVhfTElORV9QT1JUSU9OX0xFTkdUSCk7XG4gICAgICAgICAgICBjb25zdCByZXN1bHRMaW5lcyA9IGxpbmVzLnNsaWNlKDAsIC0xKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdChgbGluZXMtJHtzdHJlYW1OYW1lfWAsIHJlc3VsdExpbmVzKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdExpbmVzKHN0cmVhbU5hbWUsIHJlc3VsdExpbmVzKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFBvcnRpb24gPSBjdXRTdWZmaXgobGluZXNbMF0sIE1BWF9MSU5FX1BPUlRJT05fTEVOR1RIKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmxhc3RMaW5lUG9ydGlvbltzdHJlYW1OYW1lXS5sZW5ndGggKyBjdXJyZW50UG9ydGlvbi5sZW5ndGggPiBNQVhfTElORV9QT1JUSU9OX0xFTkdUSCkge1xuICAgICAgICAgICAgICB0aGlzLmxhc3RMaW5lUG9ydGlvbltzdHJlYW1OYW1lXSA9IGN1cnJlbnRQb3J0aW9uO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5sYXN0TGluZVBvcnRpb25bc3RyZWFtTmFtZV0gKz0gY3VycmVudFBvcnRpb247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICAvLyBpZiB3ZSBnZXQgYW4gZXJyb3Igc3Bhd25pbmcgdGhlIHByb2MsIHJlamVjdCBhbmQgY2xlYW4gdXAgdGhlIHByb2NcbiAgICAgIHRoaXMucHJvYy5vbignZXJyb3InLCBlcnIgPT4ge1xuICAgICAgICB0aGlzLnByb2MucmVtb3ZlQWxsTGlzdGVuZXJzKCdleGl0Jyk7XG4gICAgICAgIHRoaXMucHJvYy5raWxsKCdTSUdJTlQnKTtcblxuICAgICAgICBpZiAoZXJyLmVycm5vID09PSAnRU5PRU5UJykge1xuICAgICAgICAgIGVyciA9IG5ldyBFcnJvcihgQ29tbWFuZCAnJHt0aGlzLmNtZH0nIG5vdCBmb3VuZC4gSXMgaXQgaW5zdGFsbGVkP2ApO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICh0aGlzLnByb2Muc3Rkb3V0KSB7XG4gICAgICAgIHRoaXMucHJvYy5zdGRvdXQucGlwZSh0aHJvdWdoKHN0ZG91dCA9PiB7XG4gICAgICAgICAgaGFuZGxlT3V0cHV0KHtzdGRvdXQsIHN0ZGVycjogJyd9KTtcbiAgICAgICAgfSkpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5wcm9jLnN0ZGVycikge1xuICAgICAgICB0aGlzLnByb2Muc3RkZXJyLnBpcGUodGhyb3VnaChzdGRlcnIgPT4ge1xuICAgICAgICAgIGhhbmRsZU91dHB1dCh7c3Rkb3V0OiAnJywgc3RkZXJyfSk7XG4gICAgICAgIH0pKTtcbiAgICAgIH1cblxuICAgICAgLy8gd2hlbiB0aGUgcHJvYyBleGl0cywgd2UgbWlnaHQgc3RpbGwgaGF2ZSBhIGJ1ZmZlciBvZiBsaW5lcyB3ZSB3ZXJlXG4gICAgICAvLyB3YWl0aW5nIG9uIG1vcmUgY2h1bmtzIHRvIGNvbXBsZXRlLiBHbyBhaGVhZCBhbmQgZW1pdCB0aG9zZSwgdGhlblxuICAgICAgLy8gcmUtZW1pdCB0aGUgZXhpdCBzbyBhIGxpc3RlbmVyIGNhbiBoYW5kbGUgdGhlIHBvc3NpYmx5LXVuZXhwZWN0ZWQgZXhpdFxuICAgICAgdGhpcy5wcm9jLm9uKCdleGl0JywgKGNvZGUsIHNpZ25hbCkgPT4ge1xuICAgICAgICB0aGlzLmhhbmRsZUxhc3RMaW5lcygpO1xuXG4gICAgICAgIHRoaXMuZW1pdCgnZXhpdCcsIGNvZGUsIHNpZ25hbCk7XG5cbiAgICAgICAgLy8gaW4gYWRkaXRpb24gdG8gdGhlIGJhcmUgZXhpdCBldmVudCwgYWxzbyBlbWl0IG9uZSBvZiB0aHJlZSBvdGhlclxuICAgICAgICAvLyBldmVudHMgdGhhdCBjb250YWluIG1vcmUgaGVscGZ1bCBpbmZvcm1hdGlvbjpcbiAgICAgICAgLy8gJ3N0b3AnOiB3ZSBzdG9wcGVkIHRoaXNcbiAgICAgICAgLy8gJ2RpZSc6IHRoZSBwcm9jZXNzIGVuZGVkIG91dCBvZiBvdXIgY29udHJvbCB3aXRoIGEgbm9uLXplcm8gZXhpdFxuICAgICAgICAvLyAnZW5kJzogdGhlIHByb2Nlc3MgZW5kZWQgb3V0IG9mIG91ciBjb250cm9sIHdpdGggYSB6ZXJvIGV4aXRcbiAgICAgICAgbGV0IGV2ZW50ID0gdGhpcy5leHBlY3RpbmdFeGl0ID8gJ3N0b3AnIDogJ2RpZSc7XG4gICAgICAgIGlmICghdGhpcy5leHBlY3RpbmdFeGl0ICYmIGNvZGUgPT09IDApIHtcbiAgICAgICAgICBldmVudCA9ICdlbmQnO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZW1pdChldmVudCwgY29kZSwgc2lnbmFsKTtcblxuICAgICAgICAvLyBmaW5hbGx5IGNsZWFuIHVwIHRoZSBwcm9jIGFuZCBtYWtlIHN1cmUgdG8gcmVzZXQgb3VyIGV4aXRcbiAgICAgICAgLy8gZXhwZWN0YXRpb25zXG4gICAgICAgIHRoaXMucHJvYyA9IG51bGw7XG4gICAgICAgIHRoaXMuZXhwZWN0aW5nRXhpdCA9IGZhbHNlO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIGlmIHRoZSB1c2VyIGhhc24ndCBnaXZlbiB1cyBhIHN0YXJ0RGV0ZWN0b3IsIGluc3RlYWQganVzdCByZXNvbHZlXG4gICAgICAvLyB3aGVuIHN0YXJ0RGVsYXkgbXMgaGF2ZSBwYXNzZWRcbiAgICAgIGlmICghc3RhcnREZXRlY3Rvcikge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgcmVzb2x2ZSgpOyB9LCBzdGFydERlbGF5KTtcbiAgICAgIH1cblxuICAgICAgLy8gaWYgdGhlIHVzZXIgaGFzIGdpdmVuIHVzIGEgdGltZW91dCwgc3RhcnQgdGhlIGNsb2NrIGZvciByZWplY3RpbmdcbiAgICAgIC8vIHRoZSBwcm9taXNlIGlmIHdlIHRha2UgdG9vIGxvbmcgdG8gc3RhcnRcbiAgICAgIGlmIChfLmlzTnVtYmVyKHRpbWVvdXRNcykpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgVGhlIHByb2Nlc3MgZGlkIG5vdCBzdGFydCB3aXRoaW4gJHt0aW1lb3V0TXN9bXMgYCArXG4gICAgICAgICAgICBgKGNtZDogJyR7dGhpcy5yZXB9JylgKSk7XG4gICAgICAgIH0sIHRpbWVvdXRNcyk7XG4gICAgICB9XG4gICAgfSkuZmluYWxseSgoKSA9PiB7XG4gICAgICBpZiAoZGV0YWNoICYmIHRoaXMucHJvYykge1xuICAgICAgICB0aGlzLnByb2MudW5yZWYoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGhhbmRsZUxhc3RMaW5lcyAoKSB7XG4gICAgZm9yIChsZXQgc3RyZWFtIG9mIFsnc3Rkb3V0JywgJ3N0ZGVyciddKSB7XG4gICAgICBpZiAodGhpcy5sYXN0TGluZVBvcnRpb25bc3RyZWFtXSkge1xuICAgICAgICBjb25zdCBsYXN0TGluZXMgPSBbdGhpcy5sYXN0TGluZVBvcnRpb25bc3RyZWFtXV07XG4gICAgICAgIHRoaXMuZW1pdChgbGluZXMtJHtzdHJlYW19YCwgbGFzdExpbmVzKTtcbiAgICAgICAgdGhpcy5lbWl0TGluZXMoc3RyZWFtLCBsYXN0TGluZXMpO1xuICAgICAgICB0aGlzLmxhc3RMaW5lUG9ydGlvbltzdHJlYW1dID0gJyc7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc3RvcCAoc2lnbmFsID0gJ1NJR1RFUk0nLCB0aW1lb3V0ID0gMTAwMDApIHtcbiAgICBpZiAoIXRoaXMuaXNSdW5uaW5nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbid0IHN0b3AgcHJvY2VzczsgaXQncyBub3QgY3VycmVudGx5IHJ1bm5pbmcgKGNtZDogJyR7dGhpcy5yZXB9JylgKTtcbiAgICB9XG4gICAgLy8gbWFrZSBzdXJlIHRvIGVtaXQgYW55IGRhdGEgaW4gb3VyIGxpbmVzIGJ1ZmZlciB3aGVuZXZlciB3ZSdyZSBkb25lIHdpdGhcbiAgICAvLyB0aGUgcHJvY1xuICAgIHRoaXMuaGFuZGxlTGFzdExpbmVzKCk7XG4gICAgcmV0dXJuIGF3YWl0IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMucHJvYy5vbignY2xvc2UnLCByZXNvbHZlKTtcbiAgICAgIHRoaXMuZXhwZWN0aW5nRXhpdCA9IHRydWU7XG4gICAgICB0aGlzLnByb2Mua2lsbChzaWduYWwpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoYFByb2Nlc3MgZGlkbid0IGVuZCBhZnRlciAke3RpbWVvdXR9bXMgKGNtZDogJyR7dGhpcy5yZXB9JylgKSk7XG4gICAgICB9LCB0aW1lb3V0KTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGpvaW4gKGFsbG93ZWRFeGl0Q29kZXMgPSBbMF0pIHtcbiAgICBpZiAoIXRoaXMuaXNSdW5uaW5nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBqb2luIHByb2Nlc3M7IGl0IGlzIG5vdCBjdXJyZW50bHkgcnVubmluZyAoY21kOiAnJHt0aGlzLnJlcH0nKWApO1xuICAgIH1cblxuICAgIHJldHVybiBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLnByb2Mub24oJ2V4aXQnLCAoY29kZSkgPT4ge1xuICAgICAgICBpZiAoYWxsb3dlZEV4aXRDb2Rlcy5pbmRleE9mKGNvZGUpID09PSAtMSkge1xuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYFByb2Nlc3MgZW5kZWQgd2l0aCBleGl0Y29kZSAke2NvZGV9IChjbWQ6ICcke3RoaXMucmVwfScpYCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc29sdmUoY29kZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLypcbiAgICogVGhpcyB3aWxsIG9ubHkgd29yayBpZiB0aGUgcHJvY2VzcyBpcyBjcmVhdGVkIHdpdGggdGhlIGBkZXRhY2hlZGAgb3B0aW9uXG4gICAqL1xuICBkZXRhY2hQcm9jZXNzICgpIHtcbiAgICBpZiAoIXRoaXMub3B0cy5kZXRhY2hlZCkge1xuICAgICAgLy8gdGhpcyBtZWFucyB0aGF0IHRoZXJlIGlzIGEgbWlzY29uZmlndXJhdGlvbiBpbiB0aGUgY2FsbGluZyBjb2RlXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBkZXRhY2ggcHJvY2VzcyB0aGF0IGlzIG5vdCBzdGFydGVkIHdpdGggJ2RldGFjaGVkJyBvcHRpb25gKTtcbiAgICB9XG4gICAgaWYgKHRoaXMucHJvYykge1xuICAgICAgdGhpcy5wcm9jLnVucmVmKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHBpZCAoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvYyA/IHRoaXMucHJvYy5waWQgOiBudWxsO1xuICB9XG59XG5cbmV4cG9ydCB7IFN1YlByb2Nlc3MgfTtcbmV4cG9ydCBkZWZhdWx0IFN1YlByb2Nlc3M7XG4iXSwiZmlsZSI6ImxpYi9zdWJwcm9jZXNzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
|
|
269
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3N1YnByb2Nlc3MuanMiLCJuYW1lcyI6WyJFdmVudEVtaXR0ZXIiLCJldmVudHMiLCJNQVhfTElORV9QT1JUSU9OX0xFTkdUSCIsImN1dFN1ZmZpeCIsInN0ciIsInN1ZmZpeExlbmd0aCIsImxlbmd0aCIsInN1YnN0ciIsIlN1YlByb2Nlc3MiLCJjb25zdHJ1Y3RvciIsImNtZCIsImFyZ3MiLCJvcHRzIiwiRXJyb3IiLCJfIiwiaXNTdHJpbmciLCJpc0FycmF5IiwicHJvYyIsImV4cGVjdGluZ0V4aXQiLCJyZXAiLCJxdW90ZSIsImlzUnVubmluZyIsImVtaXRMaW5lcyIsInN0cmVhbSIsImxpbmVzIiwibGluZSIsImVtaXQiLCJ0b1VwcGVyQ2FzZSIsInN0YXJ0Iiwic3RhcnREZXRlY3RvciIsInRpbWVvdXRNcyIsImRldGFjaCIsInN0YXJ0RGVsYXkiLCJnZW5lcmljU3RhcnREZXRlY3RvciIsInN0ZG91dCIsInN0ZGVyciIsImlzTnVtYmVyIiwiaXNCb29sZWFuIiwiZGV0YWNoZWQiLCJCIiwicmVzb2x2ZSIsInJlamVjdCIsInNwYXduIiwic2V0RW5jb2RpbmciLCJlbmNvZGluZyIsImxhc3RMaW5lUG9ydGlvbiIsImhhbmRsZU91dHB1dCIsInN0cmVhbXMiLCJlIiwic3RyZWFtTmFtZSIsInN0cmVhbURhdGEiLCJ0b1BhaXJzIiwic3BsaXQiLCJtYXAiLCJ4IiwibGFzdCIsInJlc3VsdExpbmVzIiwic2xpY2UiLCJjdXJyZW50UG9ydGlvbiIsIm9uIiwiZXJyIiwicmVtb3ZlQWxsTGlzdGVuZXJzIiwia2lsbCIsImVycm5vIiwiZm9ybWF0RW5vZW50IiwiY3dkIiwidW5yZWYiLCJjaHVuayIsInRvU3RyaW5nIiwiY29kZSIsInNpZ25hbCIsImhhbmRsZUxhc3RMaW5lcyIsImV2ZW50Iiwic2V0VGltZW91dCIsImZpbmFsbHkiLCJsYXN0TGluZXMiLCJzdG9wIiwidGltZW91dCIsImpvaW4iLCJhbGxvd2VkRXhpdENvZGVzIiwiaW5kZXhPZiIsImRldGFjaFByb2Nlc3MiLCJwaWQiXSwic291cmNlUm9vdCI6Ii4uLy4uIiwic291cmNlcyI6WyJsaWIvc3VicHJvY2Vzcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBwcm9taXNlL3ByZWZlci1hd2FpdC10by1jYWxsYmFja3MgKi9cblxuaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCBldmVudHMgZnJvbSAnZXZlbnRzJztcbmNvbnN0IHsgRXZlbnRFbWl0dGVyIH0gPSBldmVudHM7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgeyBxdW90ZSB9IGZyb20gJ3NoZWxsLXF1b3RlJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBmb3JtYXRFbm9lbnQgfSBmcm9tICcuL2hlbHBlcnMnO1xuXG5cbi8vIFRoaXMgaXMgbmVlZGVkIHRvIGF2b2lkIG1lbW9yeSBsZWFrc1xuLy8gd2hlbiB0aGUgcHJvY2VzcyBvdXRwdXQgaXMgdG9vIGxvbmcgYW5kIGNvbnRhaW5zXG4vLyBubyBsaW5lIGJyZWFrc1xuY29uc3QgTUFYX0xJTkVfUE9SVElPTl9MRU5HVEggPSAweEZGRkY7XG5cbmZ1bmN0aW9uIGN1dFN1ZmZpeCAoc3RyLCBzdWZmaXhMZW5ndGgpIHtcbiAgcmV0dXJuIHN0ci5sZW5ndGggPiBzdWZmaXhMZW5ndGhcbiAgICAvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0yODY5XG4gICAgPyBgICR7c3RyLnN1YnN0cihzdHIubGVuZ3RoIC0gc3VmZml4TGVuZ3RoKX1gLnN1YnN0cigxKVxuICAgIDogc3RyO1xufVxuXG5cbmNsYXNzIFN1YlByb2Nlc3MgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICBjb25zdHJ1Y3RvciAoY21kLCBhcmdzID0gW10sIG9wdHMgPSB7fSkge1xuICAgIHN1cGVyKCk7XG4gICAgaWYgKCFjbWQpIHRocm93IG5ldyBFcnJvcignQ29tbWFuZCBpcyByZXF1aXJlZCcpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGN1cmx5XG4gICAgaWYgKCFfLmlzU3RyaW5nKGNtZCkpIHRocm93IG5ldyBFcnJvcignQ29tbWFuZCBtdXN0IGJlIGEgc3RyaW5nJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY3VybHlcbiAgICBpZiAoIV8uaXNBcnJheShhcmdzKSkgdGhyb3cgbmV3IEVycm9yKCdBcmdzIG11c3QgYmUgYW4gYXJyYXknKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjdXJseVxuXG4gICAgdGhpcy5jbWQgPSBjbWQ7XG4gICAgdGhpcy5hcmdzID0gYXJncztcbiAgICB0aGlzLnByb2MgPSBudWxsO1xuICAgIHRoaXMub3B0cyA9IG9wdHM7XG4gICAgdGhpcy5leHBlY3RpbmdFeGl0ID0gZmFsc2U7XG5cbiAgICAvLyBnZXQgYSBxdW90ZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbW1hbmQgZm9yIGVycm9yIHN0cmluZ3NcbiAgICB0aGlzLnJlcCA9IHF1b3RlKFtjbWQsIC4uLmFyZ3NdKTtcbiAgfVxuXG4gIGdldCBpc1J1bm5pbmcgKCkge1xuICAgIC8vIHByZXNlbmNlIG9mIGBwcm9jYCBtZWFucyB3ZSBoYXZlIGNvbm5lY3RlZCBhbmQgc3RhcnRlZFxuICAgIHJldHVybiAhIXRoaXMucHJvYztcbiAgfVxuXG4gIGVtaXRMaW5lcyAoc3RyZWFtLCBsaW5lcykge1xuICAgIGZvciAobGV0IGxpbmUgb2YgbGluZXMpIHtcbiAgICAgIHRoaXMuZW1pdCgnc3RyZWFtLWxpbmUnLCBgWyR7c3RyZWFtLnRvVXBwZXJDYXNlKCl9XSAke2xpbmV9YCk7XG4gICAgfVxuICB9XG5cbiAgLy8gc3Bhd24gdGhlIHN1YnByb2Nlc3MgYW5kIHJldHVybiBjb250cm9sIHdoZW5ldmVyIHdlIGRlZW0gdGhhdCBpdCBoYXMgZnVsbHlcbiAgLy8gXCJzdGFydGVkXCJcbiAgYXN5bmMgc3RhcnQgKHN0YXJ0RGV0ZWN0b3IgPSBudWxsLCB0aW1lb3V0TXMgPSBudWxsLCBkZXRhY2ggPSBmYWxzZSkge1xuICAgIGxldCBzdGFydERlbGF5ID0gMTA7XG5cbiAgICBjb25zdCBnZW5lcmljU3RhcnREZXRlY3RvciA9IGZ1bmN0aW9uIGdlbmVyaWNTdGFydERldGVjdG9yIChzdGRvdXQsIHN0ZGVycikge1xuICAgICAgcmV0dXJuIHN0ZG91dCB8fCBzdGRlcnI7XG4gICAgfTtcblxuICAgIC8vIHRoZSBkZWZhdWx0IHN0YXJ0IGRldGVjdG9yIHNpbXBseSByZXR1cm5zIHRydWUgd2hlbiB3ZSBnZXQgYW55IG91dHB1dFxuICAgIGlmIChzdGFydERldGVjdG9yID09PSBudWxsKSB7XG4gICAgICBzdGFydERldGVjdG9yID0gZ2VuZXJpY1N0YXJ0RGV0ZWN0b3I7XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIHVzZXIgcGFzc2VzIGEgbnVtYmVyLCB0aGVuIHdlIHNpbXBseSBkZWxheSBhIGNlcnRhaW4gYW1vdW50IG9mXG4gICAgLy8gdGltZSBiZWZvcmUgcmV0dXJuaW5nIGNvbnRyb2wsIHJhdGhlciB0aGFuIHdhaXRpbmcgZm9yIGEgY29uZGl0aW9uXG4gICAgaWYgKF8uaXNOdW1iZXIoc3RhcnREZXRlY3RvcikpIHtcbiAgICAgIHN0YXJ0RGVsYXkgPSBzdGFydERldGVjdG9yO1xuICAgICAgc3RhcnREZXRlY3RvciA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIHVzZXIgcGFzc2VzIGluIGEgYm9vbGVhbiBhcyBvbmUgb2YgdGhlIGFyZ3VtZW50cywgdXNlIGl0IGZvciBgZGV0YWNoYFxuICAgIGlmIChfLmlzQm9vbGVhbihzdGFydERldGVjdG9yKSAmJiBzdGFydERldGVjdG9yKSB7XG4gICAgICBpZiAoIXRoaXMub3B0cy5kZXRhY2hlZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBkZXRhY2ggcHJvY2VzcyB0aGF0IGlzIG5vdCBzdGFydGVkIHdpdGggJ2RldGFjaGVkJyBvcHRpb25gKTtcbiAgICAgIH1cbiAgICAgIGRldGFjaCA9IHRydWU7XG4gICAgICBzdGFydERldGVjdG9yID0gZ2VuZXJpY1N0YXJ0RGV0ZWN0b3I7XG4gICAgfSBlbHNlIGlmIChfLmlzQm9vbGVhbih0aW1lb3V0TXMpICYmIHRpbWVvdXRNcykge1xuICAgICAgaWYgKCF0aGlzLm9wdHMuZGV0YWNoZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gZGV0YWNoIHByb2Nlc3MgdGhhdCBpcyBub3Qgc3RhcnRlZCB3aXRoICdkZXRhY2hlZCcgb3B0aW9uYCk7XG4gICAgICB9XG4gICAgICBkZXRhY2ggPSB0cnVlO1xuICAgICAgdGltZW91dE1zID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyByZXR1cm4gYSBwcm9taXNlIHNvIHdlIGNhbiB3cmFwIHRoZSBhc3luYyBiZWhhdmlvclxuICAgIHJldHVybiBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAvLyBhY3R1YWxseSBzcGF3biB0aGUgc3VicHJvY1xuICAgICAgdGhpcy5wcm9jID0gc3Bhd24odGhpcy5jbWQsIHRoaXMuYXJncywgdGhpcy5vcHRzKTtcblxuICAgICAgaWYgKHRoaXMucHJvYy5zdGRvdXQpIHtcbiAgICAgICAgdGhpcy5wcm9jLnN0ZG91dC5zZXRFbmNvZGluZyh0aGlzLm9wdHMuZW5jb2RpbmcgfHwgJ3V0ZjgnKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnByb2Muc3RkZXJyKSB7XG4gICAgICAgIHRoaXMucHJvYy5zdGRlcnIuc2V0RW5jb2RpbmcodGhpcy5vcHRzLmVuY29kaW5nIHx8ICd1dGY4Jyk7XG4gICAgICB9XG4gICAgICB0aGlzLmxhc3RMaW5lUG9ydGlvbiA9IHtzdGRvdXQ6ICcnLCBzdGRlcnI6ICcnfTtcblxuICAgICAgLy8gdGhpcyBmdW5jdGlvbiBoYW5kbGVzIG91dHB1dCB0aGF0IHdlIGNvbGxlY3QgZnJvbSB0aGUgc3VicHJvY1xuICAgICAgY29uc3QgaGFuZGxlT3V0cHV0ID0gKHN0cmVhbXMpID0+IHtcbiAgICAgICAgY29uc3Qge3N0ZG91dCwgc3RkZXJyfSA9IHN0cmVhbXM7XG4gICAgICAgIC8vIGlmIHdlIGhhdmUgYSBzdGFydERldGVjdG9yLCBydW4gaXQgb24gdGhlIG91dHB1dCBzbyB3ZSBjYW4gcmVzb2x2ZS9cbiAgICAgICAgLy8gcmVqZWN0IGFuZCBtb3ZlIG9uIGZyb20gc3RhcnRcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAoc3RhcnREZXRlY3RvciAmJiBzdGFydERldGVjdG9yKHN0ZG91dCwgc3RkZXJyKSkge1xuICAgICAgICAgICAgc3RhcnREZXRlY3RvciA9IG51bGw7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZW1pdCB0aGUgYWN0dWFsIG91dHB1dCBmb3Igd2hvbWV2ZXIncyBsaXN0ZW5pbmdcbiAgICAgICAgdGhpcy5lbWl0KCdvdXRwdXQnLCBzdGRvdXQsIHN0ZGVycik7XG5cbiAgICAgICAgLy8gd2UgYWxzbyB3YW50IHRvIGVtaXQgbGluZXMsIGJ1dCBpdCdzIG1vcmUgY29tcGxleCBzaW5jZSBvdXRwdXRcbiAgICAgICAgLy8gY29tZXMgaW4gY2h1bmtzIGFuZCBhIGxpbmUgY291bGQgY29tZSBpbiB0d28gZGlmZmVyZW50IGNodW5rcywgc29cbiAgICAgICAgLy8gd2UgaGF2ZSBsb2dpYyB0byBoYW5kbGUgdGhhdCBjYXNlICh1c2luZyB0aGlzLmxhc3RMaW5lUG9ydGlvbiB0b1xuICAgICAgICAvLyByZW1lbWJlciBhIGxpbmUgdGhhdCBzdGFydGVkIGJ1dCBkaWQgbm90IGZpbmlzaCBpbiB0aGUgbGFzdCBjaHVuaylcbiAgICAgICAgZm9yIChjb25zdCBbc3RyZWFtTmFtZSwgc3RyZWFtRGF0YV0gb2YgXy50b1BhaXJzKHN0cmVhbXMpKSB7XG4gICAgICAgICAgaWYgKCFzdHJlYW1EYXRhKSBjb250aW51ZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjdXJseVxuICAgICAgICAgIGNvbnN0IGxpbmVzID0gc3RyZWFtRGF0YS5zcGxpdCgnXFxuJylcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTI4NjlcbiAgICAgICAgICAgIC5tYXAoKHgpID0+IGAgJHt4fWAuc3Vic3RyKDEpKTtcbiAgICAgICAgICBpZiAobGluZXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgbGluZXNbMF0gPSB0aGlzLmxhc3RMaW5lUG9ydGlvbltzdHJlYW1OYW1lXSArIGxpbmVzWzBdO1xuICAgICAgICAgICAgdGhpcy5sYXN0TGluZVBvcnRpb25bc3RyZWFtTmFtZV0gPSBjdXRTdWZmaXgoXy5sYXN0KGxpbmVzKSwgTUFYX0xJTkVfUE9SVElPTl9MRU5HVEgpO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0TGluZXMgPSBsaW5lcy5zbGljZSgwLCAtMSk7XG4gICAgICAgICAgICB0aGlzLmVtaXQoYGxpbmVzLSR7c3RyZWFtTmFtZX1gLCByZXN1bHRMaW5lcyk7XG4gICAgICAgICAgICB0aGlzLmVtaXRMaW5lcyhzdHJlYW1OYW1lLCByZXN1bHRMaW5lcyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRQb3J0aW9uID0gY3V0U3VmZml4KGxpbmVzWzBdLCBNQVhfTElORV9QT1JUSU9OX0xFTkdUSCk7XG4gICAgICAgICAgICBpZiAodGhpcy5sYXN0TGluZVBvcnRpb25bc3RyZWFtTmFtZV0ubGVuZ3RoICsgY3VycmVudFBvcnRpb24ubGVuZ3RoID4gTUFYX0xJTkVfUE9SVElPTl9MRU5HVEgpIHtcbiAgICAgICAgICAgICAgdGhpcy5sYXN0TGluZVBvcnRpb25bc3RyZWFtTmFtZV0gPSBjdXJyZW50UG9ydGlvbjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMubGFzdExpbmVQb3J0aW9uW3N0cmVhbU5hbWVdICs9IGN1cnJlbnRQb3J0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgLy8gaWYgd2UgZ2V0IGFuIGVycm9yIHNwYXduaW5nIHRoZSBwcm9jLCByZWplY3QgYW5kIGNsZWFuIHVwIHRoZSBwcm9jXG4gICAgICB0aGlzLnByb2Mub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgICB0aGlzLnByb2MucmVtb3ZlQWxsTGlzdGVuZXJzKCdleGl0Jyk7XG4gICAgICAgIHRoaXMucHJvYy5raWxsKCdTSUdJTlQnKTtcblxuICAgICAgICBpZiAoZXJyLmVycm5vID09PSAnRU5PRU5UJykge1xuICAgICAgICAgIGVyciA9IGZvcm1hdEVub2VudChlcnIsIHRoaXMuY21kLCB0aGlzLm9wdHM/LmN3ZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycik7XG5cbiAgICAgICAgdGhpcy5wcm9jLnVucmVmKCk7XG4gICAgICAgIHRoaXMucHJvYyA9IG51bGw7XG4gICAgICB9KTtcblxuICAgICAgaWYgKHRoaXMucHJvYy5zdGRvdXQpIHtcbiAgICAgICAgdGhpcy5wcm9jLnN0ZG91dC5vbignZGF0YScsIChjaHVuaykgPT4gaGFuZGxlT3V0cHV0KHtzdGRvdXQ6IGNodW5rLnRvU3RyaW5nKCksIHN0ZGVycjogJyd9KSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnByb2Muc3RkZXJyKSB7XG4gICAgICAgIHRoaXMucHJvYy5zdGRlcnIub24oJ2RhdGEnLCAoY2h1bmspID0+IGhhbmRsZU91dHB1dCh7c3Rkb3V0OiAnJywgc3RkZXJyOiBjaHVuay50b1N0cmluZygpfSkpO1xuICAgICAgfVxuXG4gICAgICAvLyB3aGVuIHRoZSBwcm9jIGV4aXRzLCB3ZSBtaWdodCBzdGlsbCBoYXZlIGEgYnVmZmVyIG9mIGxpbmVzIHdlIHdlcmVcbiAgICAgIC8vIHdhaXRpbmcgb24gbW9yZSBjaHVua3MgdG8gY29tcGxldGUuIEdvIGFoZWFkIGFuZCBlbWl0IHRob3NlLCB0aGVuXG4gICAgICAvLyByZS1lbWl0IHRoZSBleGl0IHNvIGEgbGlzdGVuZXIgY2FuIGhhbmRsZSB0aGUgcG9zc2libHktdW5leHBlY3RlZCBleGl0XG4gICAgICB0aGlzLnByb2Mub24oJ2V4aXQnLCAoY29kZSwgc2lnbmFsKSA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlTGFzdExpbmVzKCk7XG5cbiAgICAgICAgdGhpcy5lbWl0KCdleGl0JywgY29kZSwgc2lnbmFsKTtcblxuICAgICAgICAvLyBpbiBhZGRpdGlvbiB0byB0aGUgYmFyZSBleGl0IGV2ZW50LCBhbHNvIGVtaXQgb25lIG9mIHRocmVlIG90aGVyXG4gICAgICAgIC8vIGV2ZW50cyB0aGF0IGNvbnRhaW4gbW9yZSBoZWxwZnVsIGluZm9ybWF0aW9uOlxuICAgICAgICAvLyAnc3RvcCc6IHdlIHN0b3BwZWQgdGhpc1xuICAgICAgICAvLyAnZGllJzogdGhlIHByb2Nlc3MgZW5kZWQgb3V0IG9mIG91ciBjb250cm9sIHdpdGggYSBub24temVybyBleGl0XG4gICAgICAgIC8vICdlbmQnOiB0aGUgcHJvY2VzcyBlbmRlZCBvdXQgb2Ygb3VyIGNvbnRyb2wgd2l0aCBhIHplcm8gZXhpdFxuICAgICAgICBsZXQgZXZlbnQgPSB0aGlzLmV4cGVjdGluZ0V4aXQgPyAnc3RvcCcgOiAnZGllJztcbiAgICAgICAgaWYgKCF0aGlzLmV4cGVjdGluZ0V4aXQgJiYgY29kZSA9PT0gMCkge1xuICAgICAgICAgIGV2ZW50ID0gJ2VuZCc7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbWl0KGV2ZW50LCBjb2RlLCBzaWduYWwpO1xuXG4gICAgICAgIC8vIGZpbmFsbHkgY2xlYW4gdXAgdGhlIHByb2MgYW5kIG1ha2Ugc3VyZSB0byByZXNldCBvdXIgZXhpdFxuICAgICAgICAvLyBleHBlY3RhdGlvbnNcbiAgICAgICAgdGhpcy5wcm9jID0gbnVsbDtcbiAgICAgICAgdGhpcy5leHBlY3RpbmdFeGl0ID0gZmFsc2U7XG4gICAgICB9KTtcblxuICAgICAgLy8gaWYgdGhlIHVzZXIgaGFzbid0IGdpdmVuIHVzIGEgc3RhcnREZXRlY3RvciwgaW5zdGVhZCBqdXN0IHJlc29sdmVcbiAgICAgIC8vIHdoZW4gc3RhcnREZWxheSBtcyBoYXZlIHBhc3NlZFxuICAgICAgaWYgKCFzdGFydERldGVjdG9yKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyByZXNvbHZlKCk7IH0sIHN0YXJ0RGVsYXkpO1xuICAgICAgfVxuXG4gICAgICAvLyBpZiB0aGUgdXNlciBoYXMgZ2l2ZW4gdXMgYSB0aW1lb3V0LCBzdGFydCB0aGUgY2xvY2sgZm9yIHJlamVjdGluZ1xuICAgICAgLy8gdGhlIHByb21pc2UgaWYgd2UgdGFrZSB0b28gbG9uZyB0byBzdGFydFxuICAgICAgaWYgKF8uaXNOdW1iZXIodGltZW91dE1zKSkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKGBUaGUgcHJvY2VzcyBkaWQgbm90IHN0YXJ0IHdpdGhpbiAke3RpbWVvdXRNc31tcyBgICtcbiAgICAgICAgICAgIGAoY21kOiAnJHt0aGlzLnJlcH0nKWApKTtcbiAgICAgICAgfSwgdGltZW91dE1zKTtcbiAgICAgIH1cbiAgICB9KS5maW5hbGx5KCgpID0+IHtcbiAgICAgIGlmIChkZXRhY2ggJiYgdGhpcy5wcm9jKSB7XG4gICAgICAgIHRoaXMucHJvYy51bnJlZigpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlTGFzdExpbmVzICgpIHtcbiAgICBmb3IgKGxldCBzdHJlYW0gb2YgWydzdGRvdXQnLCAnc3RkZXJyJ10pIHtcbiAgICAgIGlmICh0aGlzLmxhc3RMaW5lUG9ydGlvbltzdHJlYW1dKSB7XG4gICAgICAgIGNvbnN0IGxhc3RMaW5lcyA9IFt0aGlzLmxhc3RMaW5lUG9ydGlvbltzdHJlYW1dXTtcbiAgICAgICAgdGhpcy5lbWl0KGBsaW5lcy0ke3N0cmVhbX1gLCBsYXN0TGluZXMpO1xuICAgICAgICB0aGlzLmVtaXRMaW5lcyhzdHJlYW0sIGxhc3RMaW5lcyk7XG4gICAgICAgIHRoaXMubGFzdExpbmVQb3J0aW9uW3N0cmVhbV0gPSAnJztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBzdG9wIChzaWduYWwgPSAnU0lHVEVSTScsIHRpbWVvdXQgPSAxMDAwMCkge1xuICAgIGlmICghdGhpcy5pc1J1bm5pbmcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2FuJ3Qgc3RvcCBwcm9jZXNzOyBpdCdzIG5vdCBjdXJyZW50bHkgcnVubmluZyAoY21kOiAnJHt0aGlzLnJlcH0nKWApO1xuICAgIH1cbiAgICAvLyBtYWtlIHN1cmUgdG8gZW1pdCBhbnkgZGF0YSBpbiBvdXIgbGluZXMgYnVmZmVyIHdoZW5ldmVyIHdlJ3JlIGRvbmUgd2l0aFxuICAgIC8vIHRoZSBwcm9jXG4gICAgdGhpcy5oYW5kbGVMYXN0TGluZXMoKTtcbiAgICByZXR1cm4gYXdhaXQgbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5wcm9jLm9uKCdjbG9zZScsIHJlc29sdmUpO1xuICAgICAgdGhpcy5leHBlY3RpbmdFeGl0ID0gdHJ1ZTtcbiAgICAgIHRoaXMucHJvYy5raWxsKHNpZ25hbCk7XG4gICAgICAvLyB0aGlzIHRpbWVvdXQgbmVlZHMgdW5yZWYoKSBvciBub2RlIHdpbGwgd2FpdCBmb3IgdGhlIHRpbWVvdXQgdG8gZmlyZSBiZWZvcmVcbiAgICAgIC8vIGV4aXRpbmcgdGhlIHByb2Nlc3MuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgUHJvY2VzcyBkaWRuJ3QgZW5kIGFmdGVyICR7dGltZW91dH1tcyAoY21kOiAnJHt0aGlzLnJlcH0nKWApKTtcbiAgICAgIH0sIHRpbWVvdXQpLnVucmVmKCk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBqb2luIChhbGxvd2VkRXhpdENvZGVzID0gWzBdKSB7XG4gICAgaWYgKCF0aGlzLmlzUnVubmluZykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgam9pbiBwcm9jZXNzOyBpdCBpcyBub3QgY3VycmVudGx5IHJ1bm5pbmcgKGNtZDogJyR7dGhpcy5yZXB9JylgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXdhaXQgbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5wcm9jLm9uKCdleGl0JywgKGNvZGUpID0+IHtcbiAgICAgICAgaWYgKGFsbG93ZWRFeGl0Q29kZXMuaW5kZXhPZihjb2RlKSA9PT0gLTEpIHtcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKGBQcm9jZXNzIGVuZGVkIHdpdGggZXhpdGNvZGUgJHtjb2RlfSAoY21kOiAnJHt0aGlzLnJlcH0nKWApKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNvbHZlKGNvZGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qXG4gICAqIFRoaXMgd2lsbCBvbmx5IHdvcmsgaWYgdGhlIHByb2Nlc3MgaXMgY3JlYXRlZCB3aXRoIHRoZSBgZGV0YWNoZWRgIG9wdGlvblxuICAgKi9cbiAgZGV0YWNoUHJvY2VzcyAoKSB7XG4gICAgaWYgKCF0aGlzLm9wdHMuZGV0YWNoZWQpIHtcbiAgICAgIC8vIHRoaXMgbWVhbnMgdGhhdCB0aGVyZSBpcyBhIG1pc2NvbmZpZ3VyYXRpb24gaW4gdGhlIGNhbGxpbmcgY29kZVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gZGV0YWNoIHByb2Nlc3MgdGhhdCBpcyBub3Qgc3RhcnRlZCB3aXRoICdkZXRhY2hlZCcgb3B0aW9uYCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnByb2MpIHtcbiAgICAgIHRoaXMucHJvYy51bnJlZigpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBwaWQgKCkge1xuICAgIHJldHVybiB0aGlzLnByb2MgPyB0aGlzLnByb2MucGlkIDogbnVsbDtcbiAgfVxu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
|
package/index.js
CHANGED
|
@@ -1,11 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import * as cp from 'child_process';
|
|
3
|
-
import * as spIndex from './lib/subprocess';
|
|
4
|
-
import * as execIndex from './lib/exec';
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
const { spawn } = cp;
|
|
8
|
-
const { SubProcess } = spIndex;
|
|
9
|
-
const { exec } = execIndex;
|
|
10
|
-
|
|
11
|
-
export { exec, spawn, SubProcess };
|
|
1
|
+
module.exports = require('./build/lib/index.js');
|
package/lib/exec.js
CHANGED
|
@@ -1,12 +1,24 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
|
|
1
3
|
/* eslint-disable promise/prefer-await-to-callbacks */
|
|
2
4
|
|
|
3
5
|
import { spawn } from 'child_process';
|
|
4
6
|
import { quote } from 'shell-quote';
|
|
5
7
|
import B from 'bluebird';
|
|
6
8
|
import _ from 'lodash';
|
|
9
|
+
import { formatEnoent } from './helpers';
|
|
7
10
|
|
|
11
|
+
const MAX_BUFFER_SIZE = 100 * 1024 * 1024;
|
|
8
12
|
|
|
9
|
-
|
|
13
|
+
/**
|
|
14
|
+
* Spawns a process
|
|
15
|
+
* @template {TeenProcessExecOptions} T
|
|
16
|
+
* @param {string} cmd - Program to execute
|
|
17
|
+
* @param {string[]} [args] - Arguments to pass to the program
|
|
18
|
+
* @param {T} [opts] - Options
|
|
19
|
+
* @returns {Promise<BufferProp<T> extends true ? TeenProcessExecBufferResult : TeenProcessExecStringResult>}
|
|
20
|
+
*/
|
|
21
|
+
async function exec (cmd, args = [], opts = /** @type {T} */({})) {
|
|
10
22
|
// get a quoted representation of the command for error strings
|
|
11
23
|
const rep = quote([cmd, ...args]);
|
|
12
24
|
|
|
@@ -23,6 +35,8 @@ async function exec (cmd, args = [], opts = {}) {
|
|
|
23
35
|
isBuffer: false,
|
|
24
36
|
shell: undefined,
|
|
25
37
|
logger: undefined,
|
|
38
|
+
maxStdoutBufferSize: MAX_BUFFER_SIZE,
|
|
39
|
+
maxStderrBufferSize: MAX_BUFFER_SIZE,
|
|
26
40
|
}, opts);
|
|
27
41
|
|
|
28
42
|
// this is an async function, so return a promise
|
|
@@ -33,47 +47,62 @@ async function exec (cmd, args = [], opts = {}) {
|
|
|
33
47
|
let stdoutArr = [], stderrArr = [], timer = null;
|
|
34
48
|
|
|
35
49
|
// if the process errors out, reject the promise
|
|
36
|
-
proc.on('error', (err) => {
|
|
37
|
-
|
|
50
|
+
proc.on('error', /** @param {NodeJS.ErrnoException} err */(err) => {
|
|
51
|
+
// @ts-ignore
|
|
38
52
|
if (err.errno === 'ENOENT') {
|
|
39
|
-
|
|
53
|
+
err = formatEnoent(err, cmd, opts.cwd);
|
|
40
54
|
}
|
|
41
|
-
reject(
|
|
55
|
+
reject(err);
|
|
42
56
|
});
|
|
43
57
|
if (proc.stdin) {
|
|
44
|
-
proc.stdin.on('error', (err) => {
|
|
58
|
+
proc.stdin.on('error', /** @param {NodeJS.ErrnoException} err */(err) => {
|
|
45
59
|
reject(new Error(`Standard input '${err.syscall}' error: ${err.stack}`));
|
|
46
60
|
});
|
|
47
61
|
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
});
|
|
52
|
-
// keep track of stdout if we have not said not to
|
|
53
|
-
if (!opts.ignoreOutput) {
|
|
54
|
-
proc.stdout.on('data', (data) => {
|
|
55
|
-
stdoutArr.push(data);
|
|
56
|
-
if (opts.logger && _.isFunction(opts.logger.debug)) {
|
|
57
|
-
opts.logger.debug(data);
|
|
58
|
-
}
|
|
59
|
-
});
|
|
62
|
+
const handleStream = (streamType, streamProps) => {
|
|
63
|
+
if (!proc[streamType]) {
|
|
64
|
+
return;
|
|
60
65
|
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
reject(new Error(`Standard error '${err.syscall}' error: ${err.stack}`));
|
|
66
|
+
|
|
67
|
+
proc[streamType].on('error', (err) => {
|
|
68
|
+
reject(new Error(`${_.capitalize(streamType)} '${err.syscall}' error: ${err.stack}`));
|
|
65
69
|
});
|
|
66
|
-
|
|
67
|
-
if (
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
opts.logger.error(data);
|
|
72
|
-
}
|
|
73
|
-
});
|
|
70
|
+
|
|
71
|
+
if (opts.ignoreOutput) {
|
|
72
|
+
// https://github.com/nodejs/node/issues/4236
|
|
73
|
+
proc[streamType].on('data', () => {});
|
|
74
|
+
return;
|
|
74
75
|
}
|
|
75
|
-
}
|
|
76
76
|
|
|
77
|
+
// keep track of the stream if we don't want to ignore it
|
|
78
|
+
const {chunks, maxSize} = streamProps;
|
|
79
|
+
let size = 0;
|
|
80
|
+
proc[streamType].on('data', (chunk) => {
|
|
81
|
+
chunks.push(chunk);
|
|
82
|
+
size += chunk.length;
|
|
83
|
+
while (chunks.length > 1 && size >= maxSize) {
|
|
84
|
+
size -= chunks[0].length;
|
|
85
|
+
chunks.shift();
|
|
86
|
+
}
|
|
87
|
+
if (opts.logger && _.isFunction(opts.logger.debug)) {
|
|
88
|
+
opts.logger.debug(chunk.toString());
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
};
|
|
92
|
+
handleStream('stdout', {
|
|
93
|
+
maxSize: opts.maxStdoutBufferSize,
|
|
94
|
+
chunks: stdoutArr,
|
|
95
|
+
});
|
|
96
|
+
handleStream('stderr', {
|
|
97
|
+
maxSize: opts.maxStderrBufferSize,
|
|
98
|
+
chunks: stderrArr,
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* @template {boolean} U
|
|
103
|
+
* @param {U} isBuffer
|
|
104
|
+
* @returns {U extends true ? {stdout: Buffer, stderr: Buffer} : {stdout: string, stderr: string}}
|
|
105
|
+
*/
|
|
77
106
|
function getStdio (isBuffer) {
|
|
78
107
|
let stdout, stderr;
|
|
79
108
|
if (isBuffer) {
|
|
@@ -83,7 +112,7 @@ async function exec (cmd, args = [], opts = {}) {
|
|
|
83
112
|
stdout = Buffer.concat(stdoutArr).toString(opts.encoding);
|
|
84
113
|
stderr = Buffer.concat(stderrArr).toString(opts.encoding);
|
|
85
114
|
}
|
|
86
|
-
return {stdout, stderr};
|
|
115
|
+
return /** @type {U extends true ? {stdout: Buffer, stderr: Buffer} : {stdout: string, stderr: string}} */({stdout, stderr});
|
|
87
116
|
}
|
|
88
117
|
|
|
89
118
|
// if the process ends, either resolve or reject the promise based on the
|
|
@@ -95,7 +124,7 @@ async function exec (cmd, args = [], opts = {}) {
|
|
|
95
124
|
}
|
|
96
125
|
let {stdout, stderr} = getStdio(opts.isBuffer);
|
|
97
126
|
if (code === 0) {
|
|
98
|
-
resolve({stdout, stderr, code});
|
|
127
|
+
resolve(/** @type {BufferProp<T> extends true ? TeenProcessExecBufferResult : TeenProcessExecStringResult} */({stdout, stderr, code}));
|
|
99
128
|
} else {
|
|
100
129
|
let err = new Error(`Command '${rep}' exited with code ${code}`);
|
|
101
130
|
err = Object.assign(err, {stdout, stderr, code});
|
|
@@ -122,3 +151,60 @@ async function exec (cmd, args = [], opts = {}) {
|
|
|
122
151
|
|
|
123
152
|
export { exec };
|
|
124
153
|
export default exec;
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Options on top of `SpawnOptions`, unique to `teen_process.`
|
|
157
|
+
* @typedef {Object} TeenProcessProps
|
|
158
|
+
* @property {boolean} [ignoreOutput] - Ignore & discard all output
|
|
159
|
+
* @property {boolean} [isBuffer] - Return output as a Buffer
|
|
160
|
+
* @property {TeenProcessLogger} [logger] - Logger to use for debugging
|
|
161
|
+
* @property {number} [maxStdoutBufferSize] - Maximum size of `stdout` buffer
|
|
162
|
+
* @property {number} [maxStderrBufferSize] - Maximum size of `stderr` buffer
|
|
163
|
+
* @property {BufferEncoding} [encoding='utf8'] - Encoding to use for output
|
|
164
|
+
*/
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* A logger object understood by {@link exec teen_process.exec}.
|
|
168
|
+
* @typedef {Object} TeenProcessLogger
|
|
169
|
+
* @property {(...args: any[]) => void} debug
|
|
170
|
+
*/
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* Options for {@link exec teen_process.exec}.
|
|
174
|
+
* @typedef {import('child_process').SpawnOptions & TeenProcessProps} TeenProcessExecOptions
|
|
175
|
+
*/
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* The value {@link exec teen_process.exec} resolves to when `isBuffer` is `false`
|
|
179
|
+
* @typedef {Object} TeenProcessExecStringResult
|
|
180
|
+
* @property {string} stdout - Stdout
|
|
181
|
+
* @property {string} stderr - Stderr
|
|
182
|
+
* @property {number?} code - Exit code
|
|
183
|
+
*/
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* The value {@link exec teen_process.exec} resolves to when `isBuffer` is `true`
|
|
187
|
+
* @typedef {Object} TeenProcessExecBufferResult
|
|
188
|
+
* @property {Buffer} stdout - Stdout
|
|
189
|
+
* @property {Buffer} stderr - Stderr
|
|
190
|
+
* @property {number?} code - Exit code
|
|
191
|
+
*/
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* Extra props {@link exec teen_process.exec} adds to its error objects
|
|
195
|
+
* @typedef {Object} TeenProcessExecErrorProps
|
|
196
|
+
* @property {string} stdout - STDOUT
|
|
197
|
+
* @property {string} stderr - STDERR
|
|
198
|
+
* @property {number?} code - Exit code
|
|
199
|
+
*/
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* Error thrown by {@link exec teen_process.exec}
|
|
203
|
+
* @typedef {Error & TeenProcessExecErrorProps} TeenProcessExecError
|
|
204
|
+
*/
|
|
205
|
+
|
|
206
|
+
/**
|
|
207
|
+
* @template {{isBuffer?: boolean}} MaybeBuffer
|
|
208
|
+
* @typedef {MaybeBuffer['isBuffer']} BufferProp
|
|
209
|
+
* @private
|
|
210
|
+
*/
|
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 {NodeJS.ErrnoException} 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|URL?} [cwd] Optional path to the current working dir
|
|
12
|
+
* @returns {NodeJS.ErrnoException} 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/index.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// transpile:main
|
|
2
|
+
import * as cp from 'child_process';
|
|
3
|
+
import * as spIndex from './subprocess';
|
|
4
|
+
import * as execIndex from './exec';
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
const { spawn } = cp;
|
|
8
|
+
const { SubProcess } = spIndex;
|
|
9
|
+
const { exec } = execIndex;
|
|
10
|
+
|
|
11
|
+
export { exec, spawn, SubProcess };
|
package/lib/subprocess.js
CHANGED
|
@@ -2,11 +2,12 @@
|
|
|
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
|
+
|
|
10
11
|
|
|
11
12
|
// This is needed to avoid memory leaks
|
|
12
13
|
// when the process output is too long and contains
|
|
@@ -99,8 +100,7 @@ class SubProcess extends EventEmitter {
|
|
|
99
100
|
this.lastLinePortion = {stdout: '', stderr: ''};
|
|
100
101
|
|
|
101
102
|
// this function handles output that we collect from the subproc
|
|
102
|
-
const handleOutput = (
|
|
103
|
-
const streams = _.cloneDeep(data);
|
|
103
|
+
const handleOutput = (streams) => {
|
|
104
104
|
const {stdout, stderr} = streams;
|
|
105
105
|
// if we have a startDetector, run it on the output so we can resolve/
|
|
106
106
|
// reject and move on from start
|
|
@@ -143,26 +143,25 @@ class SubProcess extends EventEmitter {
|
|
|
143
143
|
};
|
|
144
144
|
|
|
145
145
|
// if we get an error spawning the proc, reject and clean up the proc
|
|
146
|
-
this.proc.on('error', err => {
|
|
146
|
+
this.proc.on('error', (err) => {
|
|
147
147
|
this.proc.removeAllListeners('exit');
|
|
148
148
|
this.proc.kill('SIGINT');
|
|
149
149
|
|
|
150
150
|
if (err.errno === 'ENOENT') {
|
|
151
|
-
err =
|
|
151
|
+
err = formatEnoent(err, this.cmd, this.opts?.cwd);
|
|
152
152
|
}
|
|
153
153
|
reject(err);
|
|
154
|
+
|
|
155
|
+
this.proc.unref();
|
|
156
|
+
this.proc = null;
|
|
154
157
|
});
|
|
155
158
|
|
|
156
159
|
if (this.proc.stdout) {
|
|
157
|
-
this.proc.stdout.
|
|
158
|
-
handleOutput({stdout, stderr: ''});
|
|
159
|
-
}));
|
|
160
|
+
this.proc.stdout.on('data', (chunk) => handleOutput({stdout: chunk.toString(), stderr: ''}));
|
|
160
161
|
}
|
|
161
162
|
|
|
162
163
|
if (this.proc.stderr) {
|
|
163
|
-
this.proc.stderr.
|
|
164
|
-
handleOutput({stdout: '', stderr});
|
|
165
|
-
}));
|
|
164
|
+
this.proc.stderr.on('data', (chunk) => handleOutput({stdout: '', stderr: chunk.toString()}));
|
|
166
165
|
}
|
|
167
166
|
|
|
168
167
|
// when the proc exits, we might still have a buffer of lines we were
|
|
@@ -233,9 +232,11 @@ class SubProcess extends EventEmitter {
|
|
|
233
232
|
this.proc.on('close', resolve);
|
|
234
233
|
this.expectingExit = true;
|
|
235
234
|
this.proc.kill(signal);
|
|
235
|
+
// this timeout needs unref() or node will wait for the timeout to fire before
|
|
236
|
+
// exiting the process.
|
|
236
237
|
setTimeout(() => {
|
|
237
238
|
reject(new Error(`Process didn't end after ${timeout}ms (cmd: '${this.rep}')`));
|
|
238
|
-
}, timeout);
|
|
239
|
+
}, timeout).unref();
|
|
239
240
|
});
|
|
240
241
|
}
|
|
241
242
|
|
package/package.json
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"child_process",
|
|
6
6
|
"process management"
|
|
7
7
|
],
|
|
8
|
-
"version": "
|
|
8
|
+
"version": "2.0.0",
|
|
9
9
|
"author": "appium",
|
|
10
10
|
"license": "Apache-2.0",
|
|
11
11
|
"repository": {
|
|
@@ -15,10 +15,11 @@
|
|
|
15
15
|
"bugs": {
|
|
16
16
|
"url": "https://github.com/appium/node-teen_process/issues"
|
|
17
17
|
},
|
|
18
|
-
"engines":
|
|
19
|
-
"node"
|
|
20
|
-
|
|
21
|
-
|
|
18
|
+
"engines": {
|
|
19
|
+
"node": ">=14",
|
|
20
|
+
"npm": ">=6"
|
|
21
|
+
},
|
|
22
|
+
"main": "./index.js",
|
|
22
23
|
"bin": {},
|
|
23
24
|
"directories": {
|
|
24
25
|
"lib": "lib"
|
|
@@ -26,7 +27,6 @@
|
|
|
26
27
|
"files": [
|
|
27
28
|
"index.js",
|
|
28
29
|
"lib",
|
|
29
|
-
"build/index.js",
|
|
30
30
|
"build/lib"
|
|
31
31
|
],
|
|
32
32
|
"dependencies": {
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"lodash": "^4.17.4",
|
|
36
36
|
"shell-quote": "^1.4.3",
|
|
37
37
|
"source-map-support": "^0.5.3",
|
|
38
|
-
"
|
|
38
|
+
"which": "^2.0.2"
|
|
39
39
|
},
|
|
40
40
|
"scripts": {
|
|
41
41
|
"clean": "rm -rf node_modules && rm -f package-lock.json && npm install",
|
|
@@ -53,16 +53,16 @@
|
|
|
53
53
|
"precommit-test"
|
|
54
54
|
],
|
|
55
55
|
"devDependencies": {
|
|
56
|
-
"
|
|
57
|
-
"appium
|
|
58
|
-
"appium
|
|
56
|
+
"@appium/eslint-config-appium": "^6.0.2",
|
|
57
|
+
"@appium/gulp-plugins": "^7.0.2",
|
|
58
|
+
"@appium/support": "^2.59.2",
|
|
59
|
+
"@types/bluebird": "^3.5.36",
|
|
60
|
+
"@types/lodash": "^4.14.177",
|
|
61
|
+
"@types/node": "^17.0.0",
|
|
62
|
+
"@types/shell-quote": "^1.7.1",
|
|
59
63
|
"chai": "^4.1.2",
|
|
60
64
|
"chai-as-promised": "^7.1.1",
|
|
61
|
-
"eslint-config-appium": "^4.0.0",
|
|
62
65
|
"gulp": "^4.0.0",
|
|
63
66
|
"pre-commit": "^1.2.2"
|
|
64
|
-
},
|
|
65
|
-
"greenkeeper": {
|
|
66
|
-
"ignore": []
|
|
67
67
|
}
|
|
68
68
|
}
|
package/build/index.js
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
|
|
4
|
-
|
|
5
|
-
Object.defineProperty(exports, "__esModule", {
|
|
6
|
-
value: true
|
|
7
|
-
});
|
|
8
|
-
exports.SubProcess = exports.spawn = exports.exec = void 0;
|
|
9
|
-
|
|
10
|
-
require("source-map-support/register");
|
|
11
|
-
|
|
12
|
-
var cp = _interopRequireWildcard(require("child_process"));
|
|
13
|
-
|
|
14
|
-
var spIndex = _interopRequireWildcard(require("./lib/subprocess"));
|
|
15
|
-
|
|
16
|
-
var execIndex = _interopRequireWildcard(require("./lib/exec"));
|
|
17
|
-
|
|
18
|
-
const {
|
|
19
|
-
spawn
|
|
20
|
-
} = cp;
|
|
21
|
-
exports.spawn = spawn;
|
|
22
|
-
const {
|
|
23
|
-
SubProcess
|
|
24
|
-
} = spIndex;
|
|
25
|
-
exports.SubProcess = SubProcess;
|
|
26
|
-
const {
|
|
27
|
-
exec
|
|
28
|
-
} = execIndex;
|
|
29
|
-
exports.exec = exec;require('source-map-support').install();
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbInNwYXduIiwiY3AiLCJTdWJQcm9jZXNzIiwic3BJbmRleCIsImV4ZWMiLCJleGVjSW5kZXgiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0EsTUFBTTtBQUFFQSxFQUFBQTtBQUFGLElBQVlDLEVBQWxCOztBQUNBLE1BQU07QUFBRUMsRUFBQUE7QUFBRixJQUFpQkMsT0FBdkI7O0FBQ0EsTUFBTTtBQUFFQyxFQUFBQTtBQUFGLElBQVdDLFNBQWpCIiwic291cmNlc0NvbnRlbnQiOlsiLy8gdHJhbnNwaWxlOm1haW5cbmltcG9ydCAqIGFzIGNwIGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0ICogYXMgc3BJbmRleCBmcm9tICcuL2xpYi9zdWJwcm9jZXNzJztcbmltcG9ydCAqIGFzIGV4ZWNJbmRleCBmcm9tICcuL2xpYi9leGVjJztcblxuXG5jb25zdCB7IHNwYXduIH0gPSBjcDtcbmNvbnN0IHsgU3ViUHJvY2VzcyB9ID0gc3BJbmRleDtcbmNvbnN0IHsgZXhlYyB9ID0gZXhlY0luZGV4O1xuXG5leHBvcnQgeyBleGVjLCBzcGF3biwgU3ViUHJvY2VzcyB9O1xuIl0sImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZVJvb3QiOiIuLiJ9
|