teen_process 2.0.0 → 2.0.1

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/build/lib/exec.js CHANGED
@@ -24,7 +24,7 @@ const MAX_BUFFER_SIZE = 100 * 1024 * 1024;
24
24
 
25
25
  async function exec(cmd, args = [], opts = {}) {
26
26
  const rep = (0, _shellQuote.quote)([cmd, ...args]);
27
- opts = Object.assign({
27
+ opts = _lodash.default.defaults(opts, {
28
28
  timeout: null,
29
29
  encoding: 'utf8',
30
30
  killSignal: 'SIGTERM',
@@ -37,7 +37,8 @@ async function exec(cmd, args = [], opts = {}) {
37
37
  logger: undefined,
38
38
  maxStdoutBufferSize: MAX_BUFFER_SIZE,
39
39
  maxStderrBufferSize: MAX_BUFFER_SIZE
40
- }, opts);
40
+ });
41
+ const isBuffer = Boolean(opts.isBuffer);
41
42
  return await new _bluebird.default((resolve, reject) => {
42
43
  let proc = (0, _child_process.spawn)(cmd, args, {
43
44
  cwd: opts.cwd,
@@ -129,7 +130,7 @@ async function exec(cmd, args = [], opts = {}) {
129
130
  let {
130
131
  stdout,
131
132
  stderr
132
- } = getStdio(opts.isBuffer);
133
+ } = getStdio(isBuffer);
133
134
 
134
135
  if (code === 0) {
135
136
  resolve({
@@ -153,7 +154,7 @@ async function exec(cmd, args = [], opts = {}) {
153
154
  let {
154
155
  stdout,
155
156
  stderr
156
- } = getStdio(opts.isBuffer);
157
+ } = getStdio(isBuffer);
157
158
  let err = new Error(`Command '${rep}' timed out after ${opts.timeout}ms`);
158
159
  err = Object.assign(err, {
159
160
  stdout,
@@ -168,7 +169,5 @@ async function exec(cmd, args = [], opts = {}) {
168
169
  }
169
170
 
170
171
  var _default = exec;
171
- exports.default = _default;require('source-map-support').install();
172
-
173
-
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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
172
+ exports.default = _default;
173
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNQVhfQlVGRkVSX1NJWkUiLCJleGVjIiwiY21kIiwiYXJncyIsIm9wdHMiLCJyZXAiLCJxdW90ZSIsIl8iLCJkZWZhdWx0cyIsInRpbWVvdXQiLCJlbmNvZGluZyIsImtpbGxTaWduYWwiLCJjd2QiLCJ1bmRlZmluZWQiLCJlbnYiLCJwcm9jZXNzIiwiaWdub3JlT3V0cHV0Iiwic3RkaW8iLCJpc0J1ZmZlciIsInNoZWxsIiwibG9nZ2VyIiwibWF4U3Rkb3V0QnVmZmVyU2l6ZSIsIm1heFN0ZGVyckJ1ZmZlclNpemUiLCJCb29sZWFuIiwiQiIsInJlc29sdmUiLCJyZWplY3QiLCJwcm9jIiwic3Bhd24iLCJzdGRvdXRBcnIiLCJzdGRlcnJBcnIiLCJ0aW1lciIsIm9uIiwiZXJyIiwiZXJybm8iLCJmb3JtYXRFbm9lbnQiLCJzdGRpbiIsIkVycm9yIiwic3lzY2FsbCIsInN0YWNrIiwiaGFuZGxlU3RyZWFtIiwic3RyZWFtVHlwZSIsInN0cmVhbVByb3BzIiwiY2FwaXRhbGl6ZSIsImNodW5rcyIsIm1heFNpemUiLCJzaXplIiwiY2h1bmsiLCJwdXNoIiwibGVuZ3RoIiwic2hpZnQiLCJpc0Z1bmN0aW9uIiwiZGVidWciLCJ0b1N0cmluZyIsImdldFN0ZGlvIiwic3Rkb3V0Iiwic3RkZXJyIiwiQnVmZmVyIiwiY29uY2F0IiwiY29kZSIsImNsZWFyVGltZW91dCIsIk9iamVjdCIsImFzc2lnbiIsInNldFRpbWVvdXQiLCJraWxsIl0sInNvdXJjZXMiOlsiLi4vLi4vbGliL2V4ZWMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgcHJvbWlzZS9wcmVmZXItYXdhaXQtdG8tY2FsbGJhY2tzICovXG5cbmltcG9ydCB7IHNwYXduIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgeyBxdW90ZSB9IGZyb20gJ3NoZWxsLXF1b3RlJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBmb3JtYXRFbm9lbnQgfSBmcm9tICcuL2hlbHBlcnMnO1xuXG5jb25zdCBNQVhfQlVGRkVSX1NJWkUgPSAxMDAgKiAxMDI0ICogMTAyNDtcblxuLyoqXG4gKiBTcGF3bnMgYSBwcm9jZXNzXG4gKiBAdGVtcGxhdGUge1RlZW5Qcm9jZXNzRXhlY09wdGlvbnN9IFRcbiAqIEBwYXJhbSB7c3RyaW5nfSBjbWQgLSBQcm9ncmFtIHRvIGV4ZWN1dGVcbiAqIEBwYXJhbSB7c3RyaW5nW119IFthcmdzXSAtIEFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSBwcm9ncmFtXG4gKiBAcGFyYW0ge1R9IFtvcHRzXSAtIE9wdGlvbnNcbiAqIEByZXR1cm5zIHtQcm9taXNlPEJ1ZmZlclByb3A8VD4gZXh0ZW5kcyB0cnVlID8gVGVlblByb2Nlc3NFeGVjQnVmZmVyUmVzdWx0IDogVGVlblByb2Nlc3NFeGVjU3RyaW5nUmVzdWx0Pn1cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZXhlYyAoY21kLCBhcmdzID0gW10sIG9wdHMgPSAvKiogQHR5cGUge1R9ICovKHt9KSkge1xuICAvLyBnZXQgYSBxdW90ZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbW1hbmQgZm9yIGVycm9yIHN0cmluZ3NcbiAgY29uc3QgcmVwID0gcXVvdGUoW2NtZCwgLi4uYXJnc10pO1xuXG4gIC8vIGV4dGVuZCBkZWZhdWx0IG9wdGlvbnM7IHdlJ3JlIGJhc2ljYWxseSByZS1pbXBsZW1lbnRpbmcgZXhlYydzIG9wdGlvbnNcbiAgLy8gZm9yIHVzZSBoZXJlIHdpdGggc3Bhd24gdW5kZXIgdGhlIGhvb2RcbiAgb3B0cyA9IC8qKiBAdHlwZSB7VH0gKi8oXy5kZWZhdWx0cyhvcHRzLCB7XG4gICAgdGltZW91dDogbnVsbCxcbiAgICBlbmNvZGluZzogJ3V0ZjgnLFxuICAgIGtpbGxTaWduYWw6ICdTSUdURVJNJyxcbiAgICBjd2Q6IHVuZGVmaW5lZCxcbiAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgIGlnbm9yZU91dHB1dDogZmFsc2UsXG4gICAgc3RkaW86ICdpbmhlcml0JyxcbiAgICBpc0J1ZmZlcjogZmFsc2UsXG4gICAgc2hlbGw6IHVuZGVmaW5lZCxcbiAgICBsb2dnZXI6IHVuZGVmaW5lZCxcbiAgICBtYXhTdGRvdXRCdWZmZXJTaXplOiBNQVhfQlVGRkVSX1NJWkUsXG4gICAgbWF4U3RkZXJyQnVmZmVyU2l6ZTogTUFYX0JVRkZFUl9TSVpFLFxuICB9KSk7XG5cbiAgY29uc3QgaXNCdWZmZXIgPSBCb29sZWFuKG9wdHMuaXNCdWZmZXIpO1xuXG4gIC8vIHRoaXMgaXMgYW4gYXN5bmMgZnVuY3Rpb24sIHNvIHJldHVybiBhIHByb21pc2VcbiAgcmV0dXJuIGF3YWl0IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAvLyBzcGF3biB0aGUgY2hpbGQgcHJvY2VzcyB3aXRoIG9wdGlvbnM7IHdlIGRvbid0IGN1cnJlbnRseSBleHBvc2UgYW55IG9mXG4gICAgLy8gdGhlIG90aGVyICdzcGF3bicgb3B0aW9ucyB0aHJvdWdoIHRoZSBBUElcbiAgICBsZXQgcHJvYyA9IHNwYXduKGNtZCwgYXJncywge2N3ZDogb3B0cy5jd2QsIGVudjogb3B0cy5lbnYsIHNoZWxsOiBvcHRzLnNoZWxsfSk7XG4gICAgbGV0IHN0ZG91dEFyciA9IFtdLCBzdGRlcnJBcnIgPSBbXSwgdGltZXIgPSBudWxsO1xuXG4gICAgLy8gaWYgdGhlIHByb2Nlc3MgZXJyb3JzIG91dCwgcmVqZWN0IHRoZSBwcm9taXNlXG4gICAgcHJvYy5vbignZXJyb3InLCAvKiogQHBhcmFtIHtOb2RlSlMuRXJybm9FeGNlcHRpb259IGVyciAqLyhlcnIpID0+IHtcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGlmIChlcnIuZXJybm8gPT09ICdFTk9FTlQnKSB7XG4gICAgICAgIGVyciA9IGZvcm1hdEVub2VudChlcnIsIGNtZCwgb3B0cy5jd2QpO1xuICAgICAgfVxuICAgICAgcmVqZWN0KGVycik7XG4gICAgfSk7XG4gICAgaWYgKHByb2Muc3RkaW4pIHtcbiAgICAgIHByb2Muc3RkaW4ub24oJ2Vycm9yJywgLyoqIEBwYXJhbSB7Tm9kZUpTLkVycm5vRXhjZXB0aW9ufSBlcnIgKi8oZXJyKSA9PiB7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoYFN0YW5kYXJkIGlucHV0ICcke2Vyci5zeXNjYWxsfScgZXJyb3I6ICR7ZXJyLnN0YWNrfWApKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCBoYW5kbGVTdHJlYW0gPSAoc3RyZWFtVHlwZSwgc3RyZWFtUHJvcHMpID0+IHtcbiAgICAgIGlmICghcHJvY1tzdHJlYW1UeXBlXSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHByb2Nbc3RyZWFtVHlwZV0ub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgICByZWplY3QobmV3IEVycm9yKGAke18uY2FwaXRhbGl6ZShzdHJlYW1UeXBlKX0gJyR7ZXJyLnN5c2NhbGx9JyBlcnJvcjogJHtlcnIuc3RhY2t9YCkpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChvcHRzLmlnbm9yZU91dHB1dCkge1xuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvaXNzdWVzLzQyMzZcbiAgICAgICAgcHJvY1tzdHJlYW1UeXBlXS5vbignZGF0YScsICgpID0+IHt9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBrZWVwIHRyYWNrIG9mIHRoZSBzdHJlYW0gaWYgd2UgZG9uJ3Qgd2FudCB0byBpZ25vcmUgaXRcbiAgICAgIGNvbnN0IHtjaHVua3MsIG1heFNpemV9ID0gc3RyZWFtUHJvcHM7XG4gICAgICBsZXQgc2l6ZSA9IDA7XG4gICAgICBwcm9jW3N0cmVhbVR5cGVdLm9uKCdkYXRhJywgKGNodW5rKSA9PiB7XG4gICAgICAgIGNodW5rcy5wdXNoKGNodW5rKTtcbiAgICAgICAgc2l6ZSArPSBjaHVuay5sZW5ndGg7XG4gICAgICAgIHdoaWxlIChjaHVua3MubGVuZ3RoID4gMSAmJiBzaXplID49IG1heFNpemUpIHtcbiAgICAgICAgICBzaXplIC09IGNodW5rc1swXS5sZW5ndGg7XG4gICAgICAgICAgY2h1bmtzLnNoaWZ0KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdHMubG9nZ2VyICYmIF8uaXNGdW5jdGlvbihvcHRzLmxvZ2dlci5kZWJ1ZykpIHtcbiAgICAgICAgICBvcHRzLmxvZ2dlci5kZWJ1ZyhjaHVuay50b1N0cmluZygpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBoYW5kbGVTdHJlYW0oJ3N0ZG91dCcsIHtcbiAgICAgIG1heFNpemU6IG9wdHMubWF4U3Rkb3V0QnVmZmVyU2l6ZSxcbiAgICAgIGNodW5rczogc3Rkb3V0QXJyLFxuICAgIH0pO1xuICAgIGhhbmRsZVN0cmVhbSgnc3RkZXJyJywge1xuICAgICAgbWF4U2l6ZTogb3B0cy5tYXhTdGRlcnJCdWZmZXJTaXplLFxuICAgICAgY2h1bmtzOiBzdGRlcnJBcnIsXG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBAdGVtcGxhdGUge2Jvb2xlYW59IFVcbiAgICAgKiBAcGFyYW0ge1V9IGlzQnVmZmVyXG4gICAgICogQHJldHVybnMge1UgZXh0ZW5kcyB0cnVlID8ge3N0ZG91dDogQnVmZmVyLCBzdGRlcnI6IEJ1ZmZlcn0gOiB7c3Rkb3V0OiBzdHJpbmcsIHN0ZGVycjogc3RyaW5nfX1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRTdGRpbyAoaXNCdWZmZXIpIHtcbiAgICAgIGxldCBzdGRvdXQsIHN0ZGVycjtcbiAgICAgIGlmIChpc0J1ZmZlcikge1xuICAgICAgICBzdGRvdXQgPSBCdWZmZXIuY29uY2F0KHN0ZG91dEFycik7XG4gICAgICAgIHN0ZGVyciA9IEJ1ZmZlci5jb25jYXQoc3RkZXJyQXJyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0ZG91dCA9IEJ1ZmZlci5jb25jYXQoc3Rkb3V0QXJyKS50b1N0cmluZyhvcHRzLmVuY29kaW5nKTtcbiAgICAgICAgc3RkZXJyID0gQnVmZmVyLmNvbmNhdChzdGRlcnJBcnIpLnRvU3RyaW5nKG9wdHMuZW5jb2RpbmcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIC8qKiBAdHlwZSB7VSBleHRlbmRzIHRydWUgPyB7c3Rkb3V0OiBCdWZmZXIsIHN0ZGVycjogQnVmZmVyfSA6IHtzdGRvdXQ6IHN0cmluZywgc3RkZXJyOiBzdHJpbmd9fSAqLyh7c3Rkb3V0LCBzdGRlcnJ9KTtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgcHJvY2VzcyBlbmRzLCBlaXRoZXIgcmVzb2x2ZSBvciByZWplY3QgdGhlIHByb21pc2UgYmFzZWQgb24gdGhlXG4gICAgLy8gZXhpdCBjb2RlIG9mIHRoZSBwcm9jZXNzLiBlaXRoZXIgd2F5LCBhdHRhY2ggc3Rkb3V0LCBzdGRlcnIsIGFuZCBjb2RlLlxuICAgIC8vIEFsc28gY2xlYW4gdXAgdGhlIHRpbWVyIGlmIGl0IGV4aXN0c1xuICAgIHByb2Mub24oJ2Nsb3NlJywgKGNvZGUpID0+IHtcbiAgICAgIGlmICh0aW1lcikge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgfVxuICAgICAgbGV0IHtzdGRvdXQsIHN0ZGVycn0gPSBnZXRTdGRpbyhpc0J1ZmZlcik7XG4gICAgICBpZiAoY29kZSA9PT0gMCkge1xuICAgICAgICByZXNvbHZlKC8qKiBAdHlwZSB7QnVmZmVyUHJvcDxUPiBleHRlbmRzIHRydWUgPyBUZWVuUHJvY2Vzc0V4ZWNCdWZmZXJSZXN1bHQgOiBUZWVuUHJvY2Vzc0V4ZWNTdHJpbmdSZXN1bHR9ICovKHtzdGRvdXQsIHN0ZGVyciwgY29kZX0pKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBlcnIgPSBuZXcgRXJyb3IoYENvbW1hbmQgJyR7cmVwfScgZXhpdGVkIHdpdGggY29kZSAke2NvZGV9YCk7XG4gICAgICAgIGVyciA9IE9iamVjdC5hc3NpZ24oZXJyLCB7c3Rkb3V0LCBzdGRlcnIsIGNvZGV9KTtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBpZiB3ZSBzZXQgYSB0aW1lb3V0IG9uIHRoZSBjaGlsZCBwcm9jZXNzLCBjdXQgaW50byB0aGUgZXhlY3V0aW9uIGFuZFxuICAgIC8vIHJlamVjdCBpZiB0aGUgdGltZW91dCBpcyByZWFjaGVkLiBBdHRhY2ggdGhlIHN0ZG91dC9zdGRlcnIgd2UgY3VycmVudGx5XG4gICAgLy8gaGF2ZSBpbiBjYXNlIGl0J3MgaGVscGZ1bCBpbiBkZWJ1Z2dpbmdcbiAgICBpZiAob3B0cy50aW1lb3V0KSB7XG4gICAgICB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBsZXQge3N0ZG91dCwgc3RkZXJyfSA9IGdldFN0ZGlvKGlzQnVmZmVyKTtcbiAgICAgICAgbGV0IGVyciA9IG5ldyBFcnJvcihgQ29tbWFuZCAnJHtyZXB9JyB0aW1lZCBvdXQgYWZ0ZXIgJHtvcHRzLnRpbWVvdXR9bXNgKTtcbiAgICAgICAgZXJyID0gT2JqZWN0LmFzc2lnbihlcnIsIHtzdGRvdXQsIHN0ZGVyciwgY29kZTogbnVsbH0pO1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgLy8gcmVqZWN0IGFuZCBUSEVOIGtpbGwgdG8gYXZvaWQgcmFjZSBjb25kaXRpb25zIHdpdGggdGhlIGhhbmRsZXJzXG4gICAgICAgIC8vIGFib3ZlXG4gICAgICAgIHByb2Mua2lsbChvcHRzLmtpbGxTaWduYWwpO1xuICAgICAgfSwgb3B0cy50aW1lb3V0KTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgeyBleGVjIH07XG5leHBvcnQgZGVmYXVsdCBleGVjO1xuXG4vKipcbiAqIE9wdGlvbnMgb24gdG9wIG9mIGBTcGF3bk9wdGlvbnNgLCB1bmlxdWUgdG8gYHRlZW5fcHJvY2Vzcy5gXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBUZWVuUHJvY2Vzc1Byb3BzXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtpZ25vcmVPdXRwdXRdIC0gSWdub3JlICYgZGlzY2FyZCBhbGwgb3V0cHV0XG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtpc0J1ZmZlcl0gLSBSZXR1cm4gb3V0cHV0IGFzIGEgQnVmZmVyXG4gKiBAcHJvcGVydHkge1RlZW5Qcm9jZXNzTG9nZ2VyfSBbbG9nZ2VyXSAtIExvZ2dlciB0byB1c2UgZm9yIGRlYnVnZ2luZ1xuICogQHByb3BlcnR5IHtudW1iZXJ9IFttYXhTdGRvdXRCdWZmZXJTaXplXSAtIE1heGltdW0gc2l6ZSBvZiBgc3Rkb3V0YCBidWZmZXJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbbWF4U3RkZXJyQnVmZmVyU2l6ZV0gLSBNYXhpbXVtIHNpemUgb2YgYHN0ZGVycmAgYnVmZmVyXG4gKiBAcHJvcGVydHkge0J1ZmZlckVuY29kaW5nfSBbZW5jb2Rpbmc9J3V0ZjgnXSAtIEVuY29kaW5nIHRvIHVzZSBmb3Igb3V0cHV0XG4gKi9cblxuLyoqXG4gKiBBIGxvZ2dlciBvYmplY3QgdW5kZXJzdG9vZCBieSB7QGxpbmsgZXhlYyB0ZWVuX3Byb2Nlc3MuZXhlY30uXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBUZWVuUHJvY2Vzc0xvZ2dlclxuICogQHByb3BlcnR5IHsoLi4uYXJnczogYW55W10pID0+IHZvaWR9IGRlYnVnXG4gKi9cblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgZXhlYyB0ZWVuX3Byb2Nlc3MuZXhlY30uXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdjaGlsZF9wcm9jZXNzJykuU3Bhd25PcHRpb25zICYgVGVlblByb2Nlc3NQcm9wc30gVGVlblByb2Nlc3NFeGVjT3B0aW9uc1xuICovXG5cbi8qKlxuICogVGhlIHZhbHVlIHtAbGluayBleGVjIHRlZW5fcHJvY2Vzcy5leGVjfSByZXNvbHZlcyB0byB3aGVuIGBpc0J1ZmZlcmAgaXMgYGZhbHNlYFxuICogQHR5cGVkZWYge09iamVjdH0gVGVlblByb2Nlc3NFeGVjU3RyaW5nUmVzdWx0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gc3Rkb3V0IC0gU3Rkb3V0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gc3RkZXJyIC0gU3RkZXJyXG4gKiBAcHJvcGVydHkge251bWJlcj99IGNvZGUgLSBFeGl0IGNvZGVcbiAqL1xuXG4vKipcbiAqIFRoZSB2YWx1ZSB7QGxpbmsgZXhlYyB0ZWVuX3Byb2Nlc3MuZXhlY30gcmVzb2x2ZXMgdG8gd2hlbiBgaXNCdWZmZXJgIGlzIGB0cnVlYFxuICogQHR5cGVkZWYge09iamVjdH0gVGVlblByb2Nlc3NFeGVjQnVmZmVyUmVzdWx0XG4gKiBAcHJvcGVydHkge0J1ZmZlcn0gc3Rkb3V0IC0gU3Rkb3V0XG4gKiBAcHJvcGVydHkge0J1ZmZlcn0gc3RkZXJyIC0gU3RkZXJyXG4gKiBAcHJvcGVydHkge251bWJlcj99IGNvZGUgLSBFeGl0IGNvZGVcbiAqL1xuXG4vKipcbiAqIEV4dHJhIHByb3BzIHtAbGluayBleGVjIHRlZW5fcHJvY2Vzcy5leGVjfSBhZGRzIHRvIGl0cyBlcnJvciBvYmplY3RzXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBUZWVuUHJvY2Vzc0V4ZWNFcnJvclByb3BzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gc3Rkb3V0IC0gU1RET1VUXG4gKiBAcHJvcGVydHkge3N0cmluZ30gc3RkZXJyIC0gU1RERVJSXG4gKiBAcHJvcGVydHkge251bWJlcj99IGNvZGUgLSBFeGl0IGNvZGVcbiAqL1xuXG4vKipcbiAqIEVycm9yIHRocm93biBieSB7QGxpbmsgZXhlYyB0ZWVuX3Byb2Nlc3MuZXhlY31cbiAqIEB0eXBlZGVmIHtFcnJvciAmIFRlZW5Qcm9jZXNzRXhlY0Vycm9yUHJvcHN9IFRlZW5Qcm9jZXNzRXhlY0Vycm9yXG4gKi9cblxuLyoqXG4gKiBAdGVtcGxhdGUge3tpc0J1ZmZlcj86IGJvb2xlYW59fSBNYXliZUJ1ZmZlclxuICogQHR5cGVkZWYge01heWJlQnVmZmVyWydpc0J1ZmZlciddfSBCdWZmZXJQcm9wXG4gKiBAcHJpdmF0ZVxuICovXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLGVBQWUsR0FBRyxNQUFNLElBQU4sR0FBYSxJQUFyQzs7QUFVQSxlQUFlQyxJQUFmLENBQXFCQyxHQUFyQixFQUEwQkMsSUFBSSxHQUFHLEVBQWpDLEVBQXFDQyxJQUFJLEdBQW9CLEVBQTdELEVBQWtFO0VBRWhFLE1BQU1DLEdBQUcsR0FBRyxJQUFBQyxpQkFBQSxFQUFNLENBQUNKLEdBQUQsRUFBTSxHQUFHQyxJQUFULENBQU4sQ0FBWjtFQUlBQyxJQUFJLEdBQW9CRyxlQUFBLENBQUVDLFFBQUYsQ0FBV0osSUFBWCxFQUFpQjtJQUN2Q0ssT0FBTyxFQUFFLElBRDhCO0lBRXZDQyxRQUFRLEVBQUUsTUFGNkI7SUFHdkNDLFVBQVUsRUFBRSxTQUgyQjtJQUl2Q0MsR0FBRyxFQUFFQyxTQUprQztJQUt2Q0MsR0FBRyxFQUFFQyxPQUFPLENBQUNELEdBTDBCO0lBTXZDRSxZQUFZLEVBQUUsS0FOeUI7SUFPdkNDLEtBQUssRUFBRSxTQVBnQztJQVF2Q0MsUUFBUSxFQUFFLEtBUjZCO0lBU3ZDQyxLQUFLLEVBQUVOLFNBVGdDO0lBVXZDTyxNQUFNLEVBQUVQLFNBVitCO0lBV3ZDUSxtQkFBbUIsRUFBRXJCLGVBWGtCO0lBWXZDc0IsbUJBQW1CLEVBQUV0QjtFQVprQixDQUFqQixDQUF4QjtFQWVBLE1BQU1rQixRQUFRLEdBQUdLLE9BQU8sQ0FBQ25CLElBQUksQ0FBQ2MsUUFBTixDQUF4QjtFQUdBLE9BQU8sTUFBTSxJQUFJTSxpQkFBSixDQUFNLENBQUNDLE9BQUQsRUFBVUMsTUFBVixLQUFxQjtJQUd0QyxJQUFJQyxJQUFJLEdBQUcsSUFBQUMsb0JBQUEsRUFBTTFCLEdBQU4sRUFBV0MsSUFBWCxFQUFpQjtNQUFDUyxHQUFHLEVBQUVSLElBQUksQ0FBQ1EsR0FBWDtNQUFnQkUsR0FBRyxFQUFFVixJQUFJLENBQUNVLEdBQTFCO01BQStCSyxLQUFLLEVBQUVmLElBQUksQ0FBQ2U7SUFBM0MsQ0FBakIsQ0FBWDtJQUNBLElBQUlVLFNBQVMsR0FBRyxFQUFoQjtJQUFBLElBQW9CQyxTQUFTLEdBQUcsRUFBaEM7SUFBQSxJQUFvQ0MsS0FBSyxHQUFHLElBQTVDO0lBR0FKLElBQUksQ0FBQ0ssRUFBTCxDQUFRLE9BQVIsRUFBMkRDLEdBQUQsSUFBUztNQUVqRSxJQUFJQSxHQUFHLENBQUNDLEtBQUosS0FBYyxRQUFsQixFQUE0QjtRQUMxQkQsR0FBRyxHQUFHLElBQUFFLHFCQUFBLEVBQWFGLEdBQWIsRUFBa0IvQixHQUFsQixFQUF1QkUsSUFBSSxDQUFDUSxHQUE1QixDQUFOO01BQ0Q7O01BQ0RjLE1BQU0sQ0FBQ08sR0FBRCxDQUFOO0lBQ0QsQ0FORDs7SUFPQSxJQUFJTixJQUFJLENBQUNTLEtBQVQsRUFBZ0I7TUFDZFQsSUFBSSxDQUFDUyxLQUFMLENBQVdKLEVBQVgsQ0FBYyxPQUFkLEVBQWlFQyxHQUFELElBQVM7UUFDdkVQLE1BQU0sQ0FBQyxJQUFJVyxLQUFKLENBQVcsbUJBQWtCSixHQUFHLENBQUNLLE9BQVEsWUFBV0wsR0FBRyxDQUFDTSxLQUFNLEVBQTlELENBQUQsQ0FBTjtNQUNELENBRkQ7SUFHRDs7SUFDRCxNQUFNQyxZQUFZLEdBQUcsQ0FBQ0MsVUFBRCxFQUFhQyxXQUFiLEtBQTZCO01BQ2hELElBQUksQ0FBQ2YsSUFBSSxDQUFDYyxVQUFELENBQVQsRUFBdUI7UUFDckI7TUFDRDs7TUFFRGQsSUFBSSxDQUFDYyxVQUFELENBQUosQ0FBaUJULEVBQWpCLENBQW9CLE9BQXBCLEVBQThCQyxHQUFELElBQVM7UUFDcENQLE1BQU0sQ0FBQyxJQUFJVyxLQUFKLENBQVcsR0FBRTlCLGVBQUEsQ0FBRW9DLFVBQUYsQ0FBYUYsVUFBYixDQUF5QixLQUFJUixHQUFHLENBQUNLLE9BQVEsWUFBV0wsR0FBRyxDQUFDTSxLQUFNLEVBQTNFLENBQUQsQ0FBTjtNQUNELENBRkQ7O01BSUEsSUFBSW5DLElBQUksQ0FBQ1ksWUFBVCxFQUF1QjtRQUVyQlcsSUFBSSxDQUFDYyxVQUFELENBQUosQ0FBaUJULEVBQWpCLENBQW9CLE1BQXBCLEVBQTRCLE1BQU0sQ0FBRSxDQUFwQztRQUNBO01BQ0Q7O01BR0QsTUFBTTtRQUFDWSxNQUFEO1FBQVNDO01BQVQsSUFBb0JILFdBQTFCO01BQ0EsSUFBSUksSUFBSSxHQUFHLENBQVg7TUFDQW5CLElBQUksQ0FBQ2MsVUFBRCxDQUFKLENBQWlCVCxFQUFqQixDQUFvQixNQUFwQixFQUE2QmUsS0FBRCxJQUFXO1FBQ3JDSCxNQUFNLENBQUNJLElBQVAsQ0FBWUQsS0FBWjtRQUNBRCxJQUFJLElBQUlDLEtBQUssQ0FBQ0UsTUFBZDs7UUFDQSxPQUFPTCxNQUFNLENBQUNLLE1BQVAsR0FBZ0IsQ0FBaEIsSUFBcUJILElBQUksSUFBSUQsT0FBcEMsRUFBNkM7VUFDM0NDLElBQUksSUFBSUYsTUFBTSxDQUFDLENBQUQsQ0FBTixDQUFVSyxNQUFsQjtVQUNBTCxNQUFNLENBQUNNLEtBQVA7UUFDRDs7UUFDRCxJQUFJOUMsSUFBSSxDQUFDZ0IsTUFBTCxJQUFlYixlQUFBLENBQUU0QyxVQUFGLENBQWEvQyxJQUFJLENBQUNnQixNQUFMLENBQVlnQyxLQUF6QixDQUFuQixFQUFvRDtVQUNsRGhELElBQUksQ0FBQ2dCLE1BQUwsQ0FBWWdDLEtBQVosQ0FBa0JMLEtBQUssQ0FBQ00sUUFBTixFQUFsQjtRQUNEO01BQ0YsQ0FWRDtJQVdELENBN0JEOztJQThCQWIsWUFBWSxDQUFDLFFBQUQsRUFBVztNQUNyQkssT0FBTyxFQUFFekMsSUFBSSxDQUFDaUIsbUJBRE87TUFFckJ1QixNQUFNLEVBQUVmO0lBRmEsQ0FBWCxDQUFaO0lBSUFXLFlBQVksQ0FBQyxRQUFELEVBQVc7TUFDckJLLE9BQU8sRUFBRXpDLElBQUksQ0FBQ2tCLG1CQURPO01BRXJCc0IsTUFBTSxFQUFFZDtJQUZhLENBQVgsQ0FBWjs7SUFVQSxTQUFTd0IsUUFBVCxDQUFtQnBDLFFBQW5CLEVBQTZCO01BQzNCLElBQUlxQyxNQUFKLEVBQVlDLE1BQVo7O01BQ0EsSUFBSXRDLFFBQUosRUFBYztRQUNacUMsTUFBTSxHQUFHRSxNQUFNLENBQUNDLE1BQVAsQ0FBYzdCLFNBQWQsQ0FBVDtRQUNBMkIsTUFBTSxHQUFHQyxNQUFNLENBQUNDLE1BQVAsQ0FBYzVCLFNBQWQsQ0FBVDtNQUNELENBSEQsTUFHTztRQUNMeUIsTUFBTSxHQUFHRSxNQUFNLENBQUNDLE1BQVAsQ0FBYzdCLFNBQWQsRUFBeUJ3QixRQUF6QixDQUFrQ2pELElBQUksQ0FBQ00sUUFBdkMsQ0FBVDtRQUNBOEMsTUFBTSxHQUFHQyxNQUFNLENBQUNDLE1BQVAsQ0FBYzVCLFNBQWQsRUFBeUJ1QixRQUF6QixDQUFrQ2pELElBQUksQ0FBQ00sUUFBdkMsQ0FBVDtNQUNEOztNQUNELE9BQTJHO1FBQUM2QyxNQUFEO1FBQVNDO01BQVQsQ0FBM0c7SUFDRDs7SUFLRDdCLElBQUksQ0FBQ0ssRUFBTCxDQUFRLE9BQVIsRUFBa0IyQixJQUFELElBQVU7TUFDekIsSUFBSTVCLEtBQUosRUFBVztRQUNUNkIsWUFBWSxDQUFDN0IsS0FBRCxDQUFaO01BQ0Q7O01BQ0QsSUFBSTtRQUFDd0IsTUFBRDtRQUFTQztNQUFULElBQW1CRixRQUFRLENBQUNwQyxRQUFELENBQS9COztNQUNBLElBQUl5QyxJQUFJLEtBQUssQ0FBYixFQUFnQjtRQUNkbEMsT0FBTyxDQUF1RztVQUFDOEIsTUFBRDtVQUFTQyxNQUFUO1VBQWlCRztRQUFqQixDQUF2RyxDQUFQO01BQ0QsQ0FGRCxNQUVPO1FBQ0wsSUFBSTFCLEdBQUcsR0FBRyxJQUFJSSxLQUFKLENBQVcsWUFBV2hDLEdBQUksc0JBQXFCc0QsSUFBSyxFQUFwRCxDQUFWO1FBQ0ExQixHQUFHLEdBQUc0QixNQUFNLENBQUNDLE1BQVAsQ0FBYzdCLEdBQWQsRUFBbUI7VUFBQ3NCLE1BQUQ7VUFBU0MsTUFBVDtVQUFpQkc7UUFBakIsQ0FBbkIsQ0FBTjtRQUNBakMsTUFBTSxDQUFDTyxHQUFELENBQU47TUFDRDtJQUNGLENBWkQ7O0lBaUJBLElBQUk3QixJQUFJLENBQUNLLE9BQVQsRUFBa0I7TUFDaEJzQixLQUFLLEdBQUdnQyxVQUFVLENBQUMsTUFBTTtRQUN2QixJQUFJO1VBQUNSLE1BQUQ7VUFBU0M7UUFBVCxJQUFtQkYsUUFBUSxDQUFDcEMsUUFBRCxDQUEvQjtRQUNBLElBQUllLEdBQUcsR0FBRyxJQUFJSSxLQUFKLENBQVcsWUFBV2hDLEdBQUkscUJBQW9CRCxJQUFJLENBQUNLLE9BQVEsSUFBM0QsQ0FBVjtRQUNBd0IsR0FBRyxHQUFHNEIsTUFBTSxDQUFDQyxNQUFQLENBQWM3QixHQUFkLEVBQW1CO1VBQUNzQixNQUFEO1VBQVNDLE1BQVQ7VUFBaUJHLElBQUksRUFBRTtRQUF2QixDQUFuQixDQUFOO1FBQ0FqQyxNQUFNLENBQUNPLEdBQUQsQ0FBTjtRQUdBTixJQUFJLENBQUNxQyxJQUFMLENBQVU1RCxJQUFJLENBQUNPLFVBQWY7TUFDRCxDQVJpQixFQVFmUCxJQUFJLENBQUNLLE9BUlUsQ0FBbEI7SUFTRDtFQUNGLENBMUdZLENBQWI7QUEyR0Q7O2VBR2NSLEkifQ==
@@ -19,7 +19,7 @@ function formatEnoent(error, cmd, cwd = null) {
19
19
 
20
20
  if (cwd) {
21
21
  try {
22
- _fs.default.accessSync(cwd, _fs.default.R_OK);
22
+ _fs.default.accessSync(cwd, _fs.default.constants.R_OK);
23
23
  } catch (ign) {
24
24
  error.message = `The current working directory '${cwd}' for '${cmd}' command ` + `either does not exist or is not accessible`;
25
25
  }
@@ -29,7 +29,5 @@ function formatEnoent(error, cmd, cwd = null) {
29
29
  }
30
30
 
31
31
  return error;
32
- }require('source-map-support').install();
33
-
34
-
35
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2hlbHBlcnMuanMiLCJuYW1lcyI6WyJmb3JtYXRFbm9lbnQiLCJlcnJvciIsImNtZCIsImN3ZCIsIndoaWNoIiwic3luYyIsImZzIiwiYWNjZXNzU3luYyIsIlJfT0siLCJpZ24iLCJtZXNzYWdlIl0sInNvdXJjZVJvb3QiOiIuLi8uLiIsInNvdXJjZXMiOlsibGliL2hlbHBlcnMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHdoaWNoIGZyb20gJ3doaWNoJztcbmltcG9ydCBmcyBmcm9tICdmcyc7XG5cbi8qKlxuICogRGVjb3JhdGVzIEVOT0VOVCBlcnJvciByZWNlaXZlZCBmcm9tIGEgc3Bhd24gc3lzdGVtIGNhbGxcbiAqIHdpdGggYSBtb3JlIGRlc2NyaXB0aXZlIG1lc3NhZ2UsIHNvIGl0IGNvdWxkIGJlIHByb3Blcmx5IGhhbmRsZWQgYnkgYSB1c2VyLlxuICpcbiAqIEBwYXJhbSB7Tm9kZUpTLkVycm5vRXhjZXB0aW9ufSBlcnJvciBPcmlnaW5hbCBlcnJvciBpbnN0YW5jZS4gISEhIFRoZSBpbnN0YW5jZSBpcyBtdXRhdGVkIGFmdGVyXG4gKiB0aGlzIGhlbHBlciBmdW5jdGlvbiBpbnZvY2F0aW9uXG4gKiBAcGFyYW0ge3N0cmluZ30gY21kIE9yaWdpbmFsIGNvbW1hbmQgdG8gZXhlY3V0ZVxuICogQHBhcmFtIHtzdHJpbmd8VVJMP30gW2N3ZF0gT3B0aW9uYWwgcGF0aCB0byB0aGUgY3VycmVudCB3b3JraW5nIGRpclxuICogQHJldHVybnMge05vZGVKUy5FcnJub0V4Y2VwdGlvbn0gTXV0YXRlZCBlcnJvciBpbnN0YW5jZSB3aXRoIGFuIGltcHJvdmVkIGRlc2NyaXB0aW9uIG9yIGFuXG4gKiB1bmNoYW5nZWQgZXJyb3IgaW5zdGFuY2VcbiAqL1xuZnVuY3Rpb24gZm9ybWF0RW5vZW50IChlcnJvciwgY21kLCBjd2QgPSBudWxsKSB7XG4gIHRyeSB7XG4gICAgd2hpY2guc3luYyhjbWQpO1xuICAgIGlmIChjd2QpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZzLmFjY2Vzc1N5bmMoY3dkLCBmcy5SX09LKTtcbiAgICAgIH0gY2F0Y2ggKGlnbikge1xuICAgICAgICBlcnJvci5tZXNzYWdlID0gYFRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5ICcke2N3ZH0nIGZvciAnJHtjbWR9JyBjb21tYW5kIGAgK1xuICAgICAgICAgIGBlaXRoZXIgZG9lcyBub3QgZXhpc3Qgb3IgaXMgbm90IGFjY2Vzc2libGVgO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAoaWduKSB7XG4gICAgZXJyb3IubWVzc2FnZSA9IGBDb21tYW5kICcke2NtZH0nIG5vdCBmb3VuZC4gSXMgaXQgaW5zdGFsbGVkP2A7XG4gIH1cbiAgcmV0dXJuIGVycm9yO1xufVxuXG5leHBvcnQgeyBmb3JtYXRFbm9lbnQgfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFhQSxTQUFTQSxZQUFULENBQXVCQyxLQUF2QixFQUE4QkMsR0FBOUIsRUFBbUNDLEdBQUcsR0FBRyxJQUF6QyxFQUErQztFQUM3QyxJQUFJO0lBQ0ZDLGNBQUEsQ0FBTUMsSUFBTixDQUFXSCxHQUFYOztJQUNBLElBQUlDLEdBQUosRUFBUztNQUNQLElBQUk7UUFDRkcsV0FBQSxDQUFHQyxVQUFILENBQWNKLEdBQWQsRUFBbUJHLFdBQUEsQ0FBR0UsSUFBdEI7TUFDRCxDQUZELENBRUUsT0FBT0MsR0FBUCxFQUFZO1FBQ1pSLEtBQUssQ0FBQ1MsT0FBTixHQUFpQixrQ0FBaUNQLEdBQUksVUFBU0QsR0FBSSxZQUFuRCxHQUNiLDRDQURIO01BRUQ7SUFDRjtFQUNGLENBVkQsQ0FVRSxPQUFPTyxHQUFQLEVBQVk7SUFDWlIsS0FBSyxDQUFDUyxPQUFOLEdBQWlCLFlBQVdSLEdBQUksK0JBQWhDO0VBQ0Q7O0VBQ0QsT0FBT0QsS0FBUDtBQUNEIn0=
32
+ }
33
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmb3JtYXRFbm9lbnQiLCJlcnJvciIsImNtZCIsImN3ZCIsIndoaWNoIiwic3luYyIsImZzIiwiYWNjZXNzU3luYyIsImNvbnN0YW50cyIsIlJfT0siLCJpZ24iLCJtZXNzYWdlIl0sInNvdXJjZXMiOlsiLi4vLi4vbGliL2hlbHBlcnMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHdoaWNoIGZyb20gJ3doaWNoJztcbmltcG9ydCBmcyBmcm9tICdmcyc7XG5cbi8qKlxuICogRGVjb3JhdGVzIEVOT0VOVCBlcnJvciByZWNlaXZlZCBmcm9tIGEgc3Bhd24gc3lzdGVtIGNhbGxcbiAqIHdpdGggYSBtb3JlIGRlc2NyaXB0aXZlIG1lc3NhZ2UsIHNvIGl0IGNvdWxkIGJlIHByb3Blcmx5IGhhbmRsZWQgYnkgYSB1c2VyLlxuICpcbiAqIEBwYXJhbSB7Tm9kZUpTLkVycm5vRXhjZXB0aW9ufSBlcnJvciBPcmlnaW5hbCBlcnJvciBpbnN0YW5jZS4gISEhIFRoZSBpbnN0YW5jZSBpcyBtdXRhdGVkIGFmdGVyXG4gKiB0aGlzIGhlbHBlciBmdW5jdGlvbiBpbnZvY2F0aW9uXG4gKiBAcGFyYW0ge3N0cmluZ30gY21kIE9yaWdpbmFsIGNvbW1hbmQgdG8gZXhlY3V0ZVxuICogQHBhcmFtIHtzdHJpbmd8VVJMP30gW2N3ZF0gT3B0aW9uYWwgcGF0aCB0byB0aGUgY3VycmVudCB3b3JraW5nIGRpclxuICogQHJldHVybnMge05vZGVKUy5FcnJub0V4Y2VwdGlvbn0gTXV0YXRlZCBlcnJvciBpbnN0YW5jZSB3aXRoIGFuIGltcHJvdmVkIGRlc2NyaXB0aW9uIG9yIGFuXG4gKiB1bmNoYW5nZWQgZXJyb3IgaW5zdGFuY2VcbiAqL1xuZnVuY3Rpb24gZm9ybWF0RW5vZW50IChlcnJvciwgY21kLCBjd2QgPSBudWxsKSB7XG4gIHRyeSB7XG4gICAgd2hpY2guc3luYyhjbWQpO1xuICAgIGlmIChjd2QpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZzLmFjY2Vzc1N5bmMoY3dkLCBmcy5jb25zdGFudHMuUl9PSyk7XG4gICAgICB9IGNhdGNoIChpZ24pIHtcbiAgICAgICAgZXJyb3IubWVzc2FnZSA9IGBUaGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSAnJHtjd2R9JyBmb3IgJyR7Y21kfScgY29tbWFuZCBgICtcbiAgICAgICAgICBgZWl0aGVyIGRvZXMgbm90IGV4aXN0IG9yIGlzIG5vdCBhY2Nlc3NpYmxlYDtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2ggKGlnbikge1xuICAgIGVycm9yLm1lc3NhZ2UgPSBgQ29tbWFuZCAnJHtjbWR9JyBub3QgZm91bmQuIElzIGl0IGluc3RhbGxlZD9gO1xuICB9XG4gIHJldHVybiBlcnJvcjtcbn1cblxuZXhwb3J0IHsgZm9ybWF0RW5vZW50IH07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBYUEsU0FBU0EsWUFBVCxDQUF1QkMsS0FBdkIsRUFBOEJDLEdBQTlCLEVBQW1DQyxHQUFHLEdBQUcsSUFBekMsRUFBK0M7RUFDN0MsSUFBSTtJQUNGQyxjQUFBLENBQU1DLElBQU4sQ0FBV0gsR0FBWDs7SUFDQSxJQUFJQyxHQUFKLEVBQVM7TUFDUCxJQUFJO1FBQ0ZHLFdBQUEsQ0FBR0MsVUFBSCxDQUFjSixHQUFkLEVBQW1CRyxXQUFBLENBQUdFLFNBQUgsQ0FBYUMsSUFBaEM7TUFDRCxDQUZELENBRUUsT0FBT0MsR0FBUCxFQUFZO1FBQ1pULEtBQUssQ0FBQ1UsT0FBTixHQUFpQixrQ0FBaUNSLEdBQUksVUFBU0QsR0FBSSxZQUFuRCxHQUNiLDRDQURIO01BRUQ7SUFDRjtFQUNGLENBVkQsQ0FVRSxPQUFPUSxHQUFQLEVBQVk7SUFDWlQsS0FBSyxDQUFDVSxPQUFOLEdBQWlCLFlBQVdULEdBQUksK0JBQWhDO0VBQ0Q7O0VBQ0QsT0FBT0QsS0FBUDtBQUNEIn0=
@@ -28,7 +28,5 @@ exports.SubProcess = SubProcess;
28
28
  const {
29
29
  exec
30
30
  } = execIndex;
31
- exports.exec = exec;require('source-map-support').install();
32
-
33
-
34
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2luZGV4LmpzIiwibmFtZXMiOlsic3Bhd24iLCJjcCIsIlN1YlByb2Nlc3MiLCJzcEluZGV4IiwiZXhlYyIsImV4ZWNJbmRleCJdLCJzb3VyY2VSb290IjoiLi4vLi4iLCJzb3VyY2VzIjpbImxpYi9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyB0cmFuc3BpbGU6bWFpblxuaW1wb3J0ICogYXMgY3AgZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgKiBhcyBzcEluZGV4IGZyb20gJy4vc3VicHJvY2Vzcyc7XG5pbXBvcnQgKiBhcyBleGVjSW5kZXggZnJvbSAnLi9leGVjJztcblxuXG5jb25zdCB7IHNwYXduIH0gPSBjcDtcbmNvbnN0IHsgU3ViUHJvY2VzcyB9ID0gc3BJbmRleDtcbmNvbnN0IHsgZXhlYyB9ID0gZXhlY0luZGV4O1xuXG5leHBvcnQgeyBleGVjLCBzcGF3biwgU3ViUHJvY2VzcyB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7O0FBR0EsTUFBTTtFQUFFQTtBQUFGLElBQVlDLEVBQWxCOztBQUNBLE1BQU07RUFBRUM7QUFBRixJQUFpQkMsT0FBdkI7O0FBQ0EsTUFBTTtFQUFFQztBQUFGLElBQVdDLFNBQWpCIn0=
31
+ exports.exec = exec;
32
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJzcGF3biIsImNwIiwiU3ViUHJvY2VzcyIsInNwSW5kZXgiLCJleGVjIiwiZXhlY0luZGV4Il0sInNvdXJjZXMiOlsiLi4vLi4vbGliL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIHRyYW5zcGlsZTptYWluXG5pbXBvcnQgKiBhcyBjcCBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCAqIGFzIHNwSW5kZXggZnJvbSAnLi9zdWJwcm9jZXNzJztcbmltcG9ydCAqIGFzIGV4ZWNJbmRleCBmcm9tICcuL2V4ZWMnO1xuXG5cbmNvbnN0IHsgc3Bhd24gfSA9IGNwO1xuY29uc3QgeyBTdWJQcm9jZXNzIH0gPSBzcEluZGV4O1xuY29uc3QgeyBleGVjIH0gPSBleGVjSW5kZXg7XG5cbmV4cG9ydCB7IGV4ZWMsIHNwYXduLCBTdWJQcm9jZXNzIH07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUNBOztBQUNBOztBQUNBOzs7Ozs7QUFHQSxNQUFNO0VBQUVBO0FBQUYsSUFBWUMsRUFBbEI7O0FBQ0EsTUFBTTtFQUFFQztBQUFGLElBQWlCQyxPQUF2Qjs7QUFDQSxNQUFNO0VBQUVDO0FBQUYsSUFBV0MsU0FBakIifQ==
@@ -31,6 +31,14 @@ function cutSuffix(str, suffixLength) {
31
31
  }
32
32
 
33
33
  class SubProcess extends EventEmitter {
34
+ lastLinePortion;
35
+ proc;
36
+ args;
37
+ cmd;
38
+ opts;
39
+ expectingExit;
40
+ rep;
41
+
34
42
  constructor(cmd, args = [], opts = {}) {
35
43
  super();
36
44
  if (!cmd) throw new Error('Command is required');
@@ -42,6 +50,10 @@ class SubProcess extends EventEmitter {
42
50
  this.opts = opts;
43
51
  this.expectingExit = false;
44
52
  this.rep = (0, _shellQuote.quote)([cmd, ...args]);
53
+ this.lastLinePortion = {
54
+ stdout: '',
55
+ stderr: ''
56
+ };
45
57
  }
46
58
 
47
59
  get isRunning() {
@@ -109,7 +121,7 @@ class SubProcess extends EventEmitter {
109
121
  } = streams;
110
122
 
111
123
  try {
112
- if (startDetector && startDetector(stdout, stderr)) {
124
+ if (_lodash.default.isFunction(startDetector) && startDetector(stdout, stderr)) {
113
125
  startDetector = null;
114
126
  resolve();
115
127
  }
@@ -142,17 +154,19 @@ class SubProcess extends EventEmitter {
142
154
  };
143
155
 
144
156
  this.proc.on('error', err => {
145
- this.proc.removeAllListeners('exit');
146
- this.proc.kill('SIGINT');
157
+ var _this$proc, _this$proc2, _this$proc3;
147
158
 
148
- if (err.errno === 'ENOENT') {
159
+ (_this$proc = this.proc) === null || _this$proc === void 0 ? void 0 : _this$proc.removeAllListeners('exit');
160
+ (_this$proc2 = this.proc) === null || _this$proc2 === void 0 ? void 0 : _this$proc2.kill('SIGINT');
161
+
162
+ if (err.code === 'ENOENT') {
149
163
  var _this$opts;
150
164
 
151
165
  err = (0, _helpers.formatEnoent)(err, this.cmd, (_this$opts = this.opts) === null || _this$opts === void 0 ? void 0 : _this$opts.cwd);
152
166
  }
153
167
 
154
168
  reject(err);
155
- this.proc.unref();
169
+ (_this$proc3 = this.proc) === null || _this$proc3 === void 0 ? void 0 : _this$proc3.unref();
156
170
  this.proc = null;
157
171
  });
158
172
 
@@ -220,9 +234,11 @@ class SubProcess extends EventEmitter {
220
234
 
221
235
  this.handleLastLines();
222
236
  return await new _bluebird.default((resolve, reject) => {
223
- this.proc.on('close', resolve);
237
+ var _this$proc4, _this$proc5;
238
+
239
+ (_this$proc4 = this.proc) === null || _this$proc4 === void 0 ? void 0 : _this$proc4.on('close', resolve);
224
240
  this.expectingExit = true;
225
- this.proc.kill(signal);
241
+ (_this$proc5 = this.proc) === null || _this$proc5 === void 0 ? void 0 : _this$proc5.kill(signal);
226
242
  setTimeout(() => {
227
243
  reject(new Error(`Process didn't end after ${timeout}ms (cmd: '${this.rep}')`));
228
244
  }, timeout).unref();
@@ -235,8 +251,10 @@ class SubProcess extends EventEmitter {
235
251
  }
236
252
 
237
253
  return await new _bluebird.default((resolve, reject) => {
238
- this.proc.on('exit', code => {
239
- if (allowedExitCodes.indexOf(code) === -1) {
254
+ var _this$proc6;
255
+
256
+ (_this$proc6 = this.proc) === null || _this$proc6 === void 0 ? void 0 : _this$proc6.on('exit', code => {
257
+ if (code !== null && allowedExitCodes.indexOf(code) === -1) {
240
258
  reject(new Error(`Process ended with exitcode ${code} (cmd: '${this.rep}')`));
241
259
  } else {
242
260
  resolve(code);
@@ -263,7 +281,5 @@ class SubProcess extends EventEmitter {
263
281
 
264
282
  exports.SubProcess = SubProcess;
265
283
  var _default = SubProcess;
266
- exports.default = _default;require('source-map-support').install();
267
-
268
-
269
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3N1YnByb2Nlc3MuanMiLCJuYW1lcyI6WyJFdmVudEVtaXR0ZXIiLCJldmVudHMiLCJNQVhfTElORV9QT1JUSU9OX0xFTkdUSCIsImN1dFN1ZmZpeCIsInN0ciIsInN1ZmZpeExlbmd0aCIsImxlbmd0aCIsInN1YnN0ciIsIlN1YlByb2Nlc3MiLCJjb25zdHJ1Y3RvciIsImNtZCIsImFyZ3MiLCJvcHRzIiwiRXJyb3IiLCJfIiwiaXNTdHJpbmciLCJpc0FycmF5IiwicHJvYyIsImV4cGVjdGluZ0V4aXQiLCJyZXAiLCJxdW90ZSIsImlzUnVubmluZyIsImVtaXRMaW5lcyIsInN0cmVhbSIsImxpbmVzIiwibGluZSIsImVtaXQiLCJ0b1VwcGVyQ2FzZSIsInN0YXJ0Iiwic3RhcnREZXRlY3RvciIsInRpbWVvdXRNcyIsImRldGFjaCIsInN0YXJ0RGVsYXkiLCJnZW5lcmljU3RhcnREZXRlY3RvciIsInN0ZG91dCIsInN0ZGVyciIsImlzTnVtYmVyIiwiaXNCb29sZWFuIiwiZGV0YWNoZWQiLCJCIiwicmVzb2x2ZSIsInJlamVjdCIsInNwYXduIiwic2V0RW5jb2RpbmciLCJlbmNvZGluZyIsImxhc3RMaW5lUG9ydGlvbiIsImhhbmRsZU91dHB1dCIsInN0cmVhbXMiLCJlIiwic3RyZWFtTmFtZSIsInN0cmVhbURhdGEiLCJ0b1BhaXJzIiwic3BsaXQiLCJtYXAiLCJ4IiwibGFzdCIsInJlc3VsdExpbmVzIiwic2xpY2UiLCJjdXJyZW50UG9ydGlvbiIsIm9uIiwiZXJyIiwicmVtb3ZlQWxsTGlzdGVuZXJzIiwia2lsbCIsImVycm5vIiwiZm9ybWF0RW5vZW50IiwiY3dkIiwidW5yZWYiLCJjaHVuayIsInRvU3RyaW5nIiwiY29kZSIsInNpZ25hbCIsImhhbmRsZUxhc3RMaW5lcyIsImV2ZW50Iiwic2V0VGltZW91dCIsImZpbmFsbHkiLCJsYXN0TGluZXMiLCJzdG9wIiwidGltZW91dCIsImpvaW4iLCJhbGxvd2VkRXhpdENvZGVzIiwiaW5kZXhPZiIsImRldGFjaFByb2Nlc3MiLCJwaWQiXSwic291cmNlUm9vdCI6Ii4uLy4uIiwic291cmNlcyI6WyJsaWIvc3VicHJvY2Vzcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBwcm9taXNlL3ByZWZlci1hd2FpdC10by1jYWxsYmFja3MgKi9cblxuaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCBldmVudHMgZnJvbSAnZXZlbnRzJztcbmNvbnN0IHsgRXZlbnRFbWl0dGVyIH0gPSBldmVudHM7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgeyBxdW90ZSB9IGZyb20gJ3NoZWxsLXF1b3RlJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBmb3JtYXRFbm9lbnQgfSBmcm9tICcuL2hlbHBlcnMnO1xuXG5cbi8vIFRoaXMgaXMgbmVlZGVkIHRvIGF2b2lkIG1lbW9yeSBsZWFrc1xuLy8gd2hlbiB0aGUgcHJvY2VzcyBvdXRwdXQgaXMgdG9vIGxvbmcgYW5kIGNvbnRhaW5zXG4vLyBubyBsaW5lIGJyZWFrc1xuY29uc3QgTUFYX0xJTkVfUE9SVElPTl9MRU5HVEggPSAweEZGRkY7XG5cbmZ1bmN0aW9uIGN1dFN1ZmZpeCAoc3RyLCBzdWZmaXhMZW5ndGgpIHtcbiAgcmV0dXJuIHN0ci5sZW5ndGggPiBzdWZmaXhMZW5ndGhcbiAgICAvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0yODY5XG4gICAgPyBgICR7c3RyLnN1YnN0cihzdHIubGVuZ3RoIC0gc3VmZml4TGVuZ3RoKX1gLnN1YnN0cigxKVxuICAgIDogc3RyO1xufVxuXG5cbmNsYXNzIFN1YlByb2Nlc3MgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICBjb25zdHJ1Y3RvciAoY21kLCBhcmdzID0gW10sIG9wdHMgPSB7fSkge1xuICAgIHN1cGVyKCk7XG4gICAgaWYgKCFjbWQpIHRocm93IG5ldyBFcnJvcignQ29tbWFuZCBpcyByZXF1aXJlZCcpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGN1cmx5XG4gICAgaWYgKCFfLmlzU3RyaW5nKGNtZCkpIHRocm93IG5ldyBFcnJvcignQ29tbWFuZCBtdXN0IGJlIGEgc3RyaW5nJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY3VybHlcbiAgICBpZiAoIV8uaXNBcnJheShhcmdzKSkgdGhyb3cgbmV3IEVycm9yKCdBcmdzIG11c3QgYmUgYW4gYXJyYXknKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjdXJseVxuXG4gICAgdGhpcy5jbWQgPSBjbWQ7XG4gICAgdGhpcy5hcmdzID0gYXJncztcbiAgICB0aGlzLnByb2MgPSBudWxsO1xuICAgIHRoaXMub3B0cyA9IG9wdHM7XG4gICAgdGhpcy5leHBlY3RpbmdFeGl0ID0gZmFsc2U7XG5cbiAgICAvLyBnZXQgYSBxdW90ZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbW1hbmQgZm9yIGVycm9yIHN0cmluZ3NcbiAgICB0aGlzLnJlcCA9IHF1b3RlKFtjbWQsIC4uLmFyZ3NdKTtcbiAgfVxuXG4gIGdldCBpc1J1bm5pbmcgKCkge1xuICAgIC8vIHByZXNlbmNlIG9mIGBwcm9jYCBtZWFucyB3ZSBoYXZlIGNvbm5lY3RlZCBhbmQgc3RhcnRlZFxuICAgIHJldHVybiAhIXRoaXMucHJvYztcbiAgfVxuXG4gIGVtaXRMaW5lcyAoc3RyZWFtLCBsaW5lcykge1xuICAgIGZvciAobGV0IGxpbmUgb2YgbGluZXMpIHtcbiAgICAgIHRoaXMuZW1pdCgnc3RyZWFtLWxpbmUnLCBgWyR7c3RyZWFtLnRvVXBwZXJDYXNlKCl9XSAke2xpbmV9YCk7XG4gICAgfVxuICB9XG5cbiAgLy8gc3Bhd24gdGhlIHN1YnByb2Nlc3MgYW5kIHJldHVybiBjb250cm9sIHdoZW5ldmVyIHdlIGRlZW0gdGhhdCBpdCBoYXMgZnVsbHlcbiAgLy8gXCJzdGFydGVkXCJcbiAgYXN5bmMgc3RhcnQgKHN0YXJ0RGV0ZWN0b3IgPSBudWxsLCB0aW1lb3V0TXMgPSBudWxsLCBkZXRhY2ggPSBmYWxzZSkge1xuICAgIGxldCBzdGFydERlbGF5ID0gMTA7XG5cbiAgICBjb25zdCBnZW5lcmljU3RhcnREZXRlY3RvciA9IGZ1bmN0aW9uIGdlbmVyaWNTdGFydERldGVjdG9yIChzdGRvdXQsIHN0ZGVycikge1xuICAgICAgcmV0dXJuIHN0ZG91dCB8fCBzdGRlcnI7XG4gICAgfTtcblxuICAgIC8vIHRoZSBkZWZhdWx0IHN0YXJ0IGRldGVjdG9yIHNpbXBseSByZXR1cm5zIHRydWUgd2hlbiB3ZSBnZXQgYW55IG91dHB1dFxuICAgIGlmIChzdGFydERldGVjdG9yID09PSBudWxsKSB7XG4gICAgICBzdGFydERldGVjdG9yID0gZ2VuZXJpY1N0YXJ0RGV0ZWN0b3I7XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIHVzZXIgcGFzc2VzIGEgbnVtYmVyLCB0aGVuIHdlIHNpbXBseSBkZWxheSBhIGNlcnRhaW4gYW1vdW50IG9mXG4gICAgLy8gdGltZSBiZWZvcmUgcmV0dXJuaW5nIGNvbnRyb2wsIHJhdGhlciB0aGFuIHdhaXRpbmcgZm9yIGEgY29uZGl0aW9uXG4gICAgaWYgKF8uaXNOdW1iZXIoc3RhcnREZXRlY3RvcikpIHtcbiAgICAgIHN0YXJ0RGVsYXkgPSBzdGFydERldGVjdG9yO1xuICAgICAgc3RhcnREZXRlY3RvciA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIHVzZXIgcGFzc2VzIGluIGEgYm9vbGVhbiBhcyBvbmUgb2YgdGhlIGFyZ3VtZW50cywgdXNlIGl0IGZvciBgZGV0YWNoYFxuICAgIGlmIChfLmlzQm9vbGVhbihzdGFydERldGVjdG9yKSAmJiBzdGFydERldGVjdG9yKSB7XG4gICAgICBpZiAoIXRoaXMub3B0cy5kZXRhY2hlZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBkZXRhY2ggcHJvY2VzcyB0aGF0IGlzIG5vdCBzdGFydGVkIHdpdGggJ2RldGFjaGVkJyBvcHRpb25gKTtcbiAgICAgIH1cbiAgICAgIGRldGFjaCA9IHRydWU7XG4gICAgICBzdGFydERldGVjdG9yID0gZ2VuZXJpY1N0YXJ0RGV0ZWN0b3I7XG4gICAgfSBlbHNlIGlmIChfLmlzQm9vbGVhbih0aW1lb3V0TXMpICYmIHRpbWVvdXRNcykge1xuICAgICAgaWYgKCF0aGlzLm9wdHMuZGV0YWNoZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gZGV0YWNoIHByb2Nlc3MgdGhhdCBpcyBub3Qgc3RhcnRlZCB3aXRoICdkZXRhY2hlZCcgb3B0aW9uYCk7XG4gICAgICB9XG4gICAgICBkZXRhY2ggPSB0cnVlO1xuICAgICAgdGltZW91dE1zID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyByZXR1cm4gYSBwcm9taXNlIHNvIHdlIGNhbiB3cmFwIHRoZSBhc3luYyBiZWhhdmlvclxuICAgIHJldHVybiBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAvLyBhY3R1YWxseSBzcGF3biB0aGUgc3VicHJvY1xuICAgICAgdGhpcy5wcm9jID0gc3Bhd24odGhpcy5jbWQsIHRoaXMuYXJncywgdGhpcy5vcHRzKTtcblxuICAgICAgaWYgKHRoaXMucHJvYy5zdGRvdXQpIHtcbiAgICAgICAgdGhpcy5wcm9jLnN0ZG91dC5zZXRFbmNvZGluZyh0aGlzLm9wdHMuZW5jb2RpbmcgfHwgJ3V0ZjgnKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnByb2Muc3RkZXJyKSB7XG4gICAgICAgIHRoaXMucHJvYy5zdGRlcnIuc2V0RW5jb2RpbmcodGhpcy5vcHRzLmVuY29kaW5nIHx8ICd1dGY4Jyk7XG4gICAgICB9XG4gICAgICB0aGlzLmxhc3RMaW5lUG9ydGlvbiA9IHtzdGRvdXQ6ICcnLCBzdGRlcnI6ICcnfTtcblxuICAgICAgLy8gdGhpcyBmdW5jdGlvbiBoYW5kbGVzIG91dHB1dCB0aGF0IHdlIGNvbGxlY3QgZnJvbSB0aGUgc3VicHJvY1xuICAgICAgY29uc3QgaGFuZGxlT3V0cHV0ID0gKHN0cmVhbXMpID0+IHtcbiAgICAgICAgY29uc3Qge3N0ZG91dCwgc3RkZXJyfSA9IHN0cmVhbXM7XG4gICAgICAgIC8vIGlmIHdlIGhhdmUgYSBzdGFydERldGVjdG9yLCBydW4gaXQgb24gdGhlIG91dHB1dCBzbyB3ZSBjYW4gcmVzb2x2ZS9cbiAgICAgICAgLy8gcmVqZWN0IGFuZCBtb3ZlIG9uIGZyb20gc3RhcnRcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAoc3RhcnREZXRlY3RvciAmJiBzdGFydERldGVjdG9yKHN0ZG91dCwgc3RkZXJyKSkge1xuICAgICAgICAgICAgc3RhcnREZXRlY3RvciA9IG51bGw7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZW1pdCB0aGUgYWN0dWFsIG91dHB1dCBmb3Igd2hvbWV2ZXIncyBsaXN0ZW5pbmdcbiAgICAgICAgdGhpcy5lbWl0KCdvdXRwdXQnLCBzdGRvdXQsIHN0ZGVycik7XG5cbiAgICAgICAgLy8gd2UgYWxzbyB3YW50IHRvIGVtaXQgbGluZXMsIGJ1dCBpdCdzIG1vcmUgY29tcGxleCBzaW5jZSBvdXRwdXRcbiAgICAgICAgLy8gY29tZXMgaW4gY2h1bmtzIGFuZCBhIGxpbmUgY291bGQgY29tZSBpbiB0d28gZGlmZmVyZW50IGNodW5rcywgc29cbiAgICAgICAgLy8gd2UgaGF2ZSBsb2dpYyB0byBoYW5kbGUgdGhhdCBjYXNlICh1c2luZyB0aGlzLmxhc3RMaW5lUG9ydGlvbiB0b1xuICAgICAgICAvLyByZW1lbWJlciBhIGxpbmUgdGhhdCBzdGFydGVkIGJ1dCBkaWQgbm90IGZpbmlzaCBpbiB0aGUgbGFzdCBjaHVuaylcbiAgICAgICAgZm9yIChjb25zdCBbc3RyZWFtTmFtZSwgc3RyZWFtRGF0YV0gb2YgXy50b1BhaXJzKHN0cmVhbXMpKSB7XG4gICAgICAgICAgaWYgKCFzdHJlYW1EYXRhKSBjb250aW51ZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjdXJseVxuICAgICAgICAgIGNvbnN0IGxpbmVzID0gc3RyZWFtRGF0YS5zcGxpdCgnXFxuJylcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTI4NjlcbiAgICAgICAgICAgIC5tYXAoKHgpID0+IGAgJHt4fWAuc3Vic3RyKDEpKTtcbiAgICAgICAgICBpZiAobGluZXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgbGluZXNbMF0gPSB0aGlzLmxhc3RMaW5lUG9ydGlvbltzdHJlYW1OYW1lXSArIGxpbmVzWzBdO1xuICAgICAgICAgICAgdGhpcy5sYXN0TGluZVBvcnRpb25bc3RyZWFtTmFtZV0gPSBjdXRTdWZmaXgoXy5sYXN0KGxpbmVzKSwgTUFYX0xJTkVfUE9SVElPTl9MRU5HVEgpO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0TGluZXMgPSBsaW5lcy5zbGljZSgwLCAtMSk7XG4gICAgICAgICAgICB0aGlzLmVtaXQoYGxpbmVzLSR7c3RyZWFtTmFtZX1gLCByZXN1bHRMaW5lcyk7XG4gICAgICAgICAgICB0aGlzLmVtaXRMaW5lcyhzdHJlYW1OYW1lLCByZXN1bHRMaW5lcyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRQb3J0aW9uID0gY3V0U3VmZml4KGxpbmVzWzBdLCBNQVhfTElORV9QT1JUSU9OX0xFTkdUSCk7XG4gICAgICAgICAgICBpZiAodGhpcy5sYXN0TGluZVBvcnRpb25bc3RyZWFtTmFtZV0ubGVuZ3RoICsgY3VycmVudFBvcnRpb24ubGVuZ3RoID4gTUFYX0xJTkVfUE9SVElPTl9MRU5HVEgpIHtcbiAgICAgICAgICAgICAgdGhpcy5sYXN0TGluZVBvcnRpb25bc3RyZWFtTmFtZV0gPSBjdXJyZW50UG9ydGlvbjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMubGFzdExpbmVQb3J0aW9uW3N0cmVhbU5hbWVdICs9IGN1cnJlbnRQb3J0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgLy8gaWYgd2UgZ2V0IGFuIGVycm9yIHNwYXduaW5nIHRoZSBwcm9jLCByZWplY3QgYW5kIGNsZWFuIHVwIHRoZSBwcm9jXG4gICAgICB0aGlzLnByb2Mub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgICB0aGlzLnByb2MucmVtb3ZlQWxsTGlzdGVuZXJzKCdleGl0Jyk7XG4gICAgICAgIHRoaXMucHJvYy5raWxsKCdTSUdJTlQnKTtcblxuICAgICAgICBpZiAoZXJyLmVycm5vID09PSAnRU5PRU5UJykge1xuICAgICAgICAgIGVyciA9IGZvcm1hdEVub2VudChlcnIsIHRoaXMuY21kLCB0aGlzLm9wdHM/LmN3ZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycik7XG5cbiAgICAgICAgdGhpcy5wcm9jLnVucmVmKCk7XG4gICAgICAgIHRoaXMucHJvYyA9IG51bGw7XG4gICAgICB9KTtcblxuICAgICAgaWYgKHRoaXMucHJvYy5zdGRvdXQpIHtcbiAgICAgICAgdGhpcy5wcm9jLnN0ZG91dC5vbignZGF0YScsIChjaHVuaykgPT4gaGFuZGxlT3V0cHV0KHtzdGRvdXQ6IGNodW5rLnRvU3RyaW5nKCksIHN0ZGVycjogJyd9KSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnByb2Muc3RkZXJyKSB7XG4gICAgICAgIHRoaXMucHJvYy5zdGRlcnIub24oJ2RhdGEnLCAoY2h1bmspID0+IGhhbmRsZU91dHB1dCh7c3Rkb3V0OiAnJywgc3RkZXJyOiBjaHVuay50b1N0cmluZygpfSkpO1xuICAgICAgfVxuXG4gICAgICAvLyB3aGVuIHRoZSBwcm9jIGV4aXRzLCB3ZSBtaWdodCBzdGlsbCBoYXZlIGEgYnVmZmVyIG9mIGxpbmVzIHdlIHdlcmVcbiAgICAgIC8vIHdhaXRpbmcgb24gbW9yZSBjaHVua3MgdG8gY29tcGxldGUuIEdvIGFoZWFkIGFuZCBlbWl0IHRob3NlLCB0aGVuXG4gICAgICAvLyByZS1lbWl0IHRoZSBleGl0IHNvIGEgbGlzdGVuZXIgY2FuIGhhbmRsZSB0aGUgcG9zc2libHktdW5leHBlY3RlZCBleGl0XG4gICAgICB0aGlzLnByb2Mub24oJ2V4aXQnLCAoY29kZSwgc2lnbmFsKSA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlTGFzdExpbmVzKCk7XG5cbiAgICAgICAgdGhpcy5lbWl0KCdleGl0JywgY29kZSwgc2lnbmFsKTtcblxuICAgICAgICAvLyBpbiBhZGRpdGlvbiB0byB0aGUgYmFyZSBleGl0IGV2ZW50LCBhbHNvIGVtaXQgb25lIG9mIHRocmVlIG90aGVyXG4gICAgICAgIC8vIGV2ZW50cyB0aGF0IGNvbnRhaW4gbW9yZSBoZWxwZnVsIGluZm9ybWF0aW9uOlxuICAgICAgICAvLyAnc3RvcCc6IHdlIHN0b3BwZWQgdGhpc1xuICAgICAgICAvLyAnZGllJzogdGhlIHByb2Nlc3MgZW5kZWQgb3V0IG9mIG91ciBjb250cm9sIHdpdGggYSBub24temVybyBleGl0XG4gICAgICAgIC8vICdlbmQnOiB0aGUgcHJvY2VzcyBlbmRlZCBvdXQgb2Ygb3VyIGNvbnRyb2wgd2l0aCBhIHplcm8gZXhpdFxuICAgICAgICBsZXQgZXZlbnQgPSB0aGlzLmV4cGVjdGluZ0V4aXQgPyAnc3RvcCcgOiAnZGllJztcbiAgICAgICAgaWYgKCF0aGlzLmV4cGVjdGluZ0V4aXQgJiYgY29kZSA9PT0gMCkge1xuICAgICAgICAgIGV2ZW50ID0gJ2VuZCc7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbWl0KGV2ZW50LCBjb2RlLCBzaWduYWwpO1xuXG4gICAgICAgIC8vIGZpbmFsbHkgY2xlYW4gdXAgdGhlIHByb2MgYW5kIG1ha2Ugc3VyZSB0byByZXNldCBvdXIgZXhpdFxuICAgICAgICAvLyBleHBlY3RhdGlvbnNcbiAgICAgICAgdGhpcy5wcm9jID0gbnVsbDtcbiAgICAgICAgdGhpcy5leHBlY3RpbmdFeGl0ID0gZmFsc2U7XG4gICAgICB9KTtcblxuICAgICAgLy8gaWYgdGhlIHVzZXIgaGFzbid0IGdpdmVuIHVzIGEgc3RhcnREZXRlY3RvciwgaW5zdGVhZCBqdXN0IHJlc29sdmVcbiAgICAgIC8vIHdoZW4gc3RhcnREZWxheSBtcyBoYXZlIHBhc3NlZFxuICAgICAgaWYgKCFzdGFydERldGVjdG9yKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyByZXNvbHZlKCk7IH0sIHN0YXJ0RGVsYXkpO1xuICAgICAgfVxuXG4gICAgICAvLyBpZiB0aGUgdXNlciBoYXMgZ2l2ZW4gdXMgYSB0aW1lb3V0LCBzdGFydCB0aGUgY2xvY2sgZm9yIHJlamVjdGluZ1xuICAgICAgLy8gdGhlIHByb21pc2UgaWYgd2UgdGFrZSB0b28gbG9uZyB0byBzdGFydFxuICAgICAgaWYgKF8uaXNOdW1iZXIodGltZW91dE1zKSkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKGBUaGUgcHJvY2VzcyBkaWQgbm90IHN0YXJ0IHdpdGhpbiAke3RpbWVvdXRNc31tcyBgICtcbiAgICAgICAgICAgIGAoY21kOiAnJHt0aGlzLnJlcH0nKWApKTtcbiAgICAgICAgfSwgdGltZW91dE1zKTtcbiAgICAgIH1cbiAgICB9KS5maW5hbGx5KCgpID0+IHtcbiAgICAgIGlmIChkZXRhY2ggJiYgdGhpcy5wcm9jKSB7XG4gICAgICAgIHRoaXMucHJvYy51bnJlZigpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlTGFzdExpbmVzICgpIHtcbiAgICBmb3IgKGxldCBzdHJlYW0gb2YgWydzdGRvdXQnLCAnc3RkZXJyJ10pIHtcbiAgICAgIGlmICh0aGlzLmxhc3RMaW5lUG9ydGlvbltzdHJlYW1dKSB7XG4gICAgICAgIGNvbnN0IGxhc3RMaW5lcyA9IFt0aGlzLmxhc3RMaW5lUG9ydGlvbltzdHJlYW1dXTtcbiAgICAgICAgdGhpcy5lbWl0KGBsaW5lcy0ke3N0cmVhbX1gLCBsYXN0TGluZXMpO1xuICAgICAgICB0aGlzLmVtaXRMaW5lcyhzdHJlYW0sIGxhc3RMaW5lcyk7XG4gICAgICAgIHRoaXMubGFzdExpbmVQb3J0aW9uW3N0cmVhbV0gPSAnJztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBzdG9wIChzaWduYWwgPSAnU0lHVEVSTScsIHRpbWVvdXQgPSAxMDAwMCkge1xuICAgIGlmICghdGhpcy5pc1J1bm5pbmcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2FuJ3Qgc3RvcCBwcm9jZXNzOyBpdCdzIG5vdCBjdXJyZW50bHkgcnVubmluZyAoY21kOiAnJHt0aGlzLnJlcH0nKWApO1xuICAgIH1cbiAgICAvLyBtYWtlIHN1cmUgdG8gZW1pdCBhbnkgZGF0YSBpbiBvdXIgbGluZXMgYnVmZmVyIHdoZW5ldmVyIHdlJ3JlIGRvbmUgd2l0aFxuICAgIC8vIHRoZSBwcm9jXG4gICAgdGhpcy5oYW5kbGVMYXN0TGluZXMoKTtcbiAgICByZXR1cm4gYXdhaXQgbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5wcm9jLm9uKCdjbG9zZScsIHJlc29sdmUpO1xuICAgICAgdGhpcy5leHBlY3RpbmdFeGl0ID0gdHJ1ZTtcbiAgICAgIHRoaXMucHJvYy5raWxsKHNpZ25hbCk7XG4gICAgICAvLyB0aGlzIHRpbWVvdXQgbmVlZHMgdW5yZWYoKSBvciBub2RlIHdpbGwgd2FpdCBmb3IgdGhlIHRpbWVvdXQgdG8gZmlyZSBiZWZvcmVcbiAgICAgIC8vIGV4aXRpbmcgdGhlIHByb2Nlc3MuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgUHJvY2VzcyBkaWRuJ3QgZW5kIGFmdGVyICR7dGltZW91dH1tcyAoY21kOiAnJHt0aGlzLnJlcH0nKWApKTtcbiAgICAgIH0sIHRpbWVvdXQpLnVucmVmKCk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBqb2luIChhbGxvd2VkRXhpdENvZGVzID0gWzBdKSB7XG4gICAgaWYgKCF0aGlzLmlzUnVubmluZykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgam9pbiBwcm9jZXNzOyBpdCBpcyBub3QgY3VycmVudGx5IHJ1bm5pbmcgKGNtZDogJyR7dGhpcy5yZXB9JylgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXdhaXQgbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5wcm9jLm9uKCdleGl0JywgKGNvZGUpID0+IHtcbiAgICAgICAgaWYgKGFsbG93ZWRFeGl0Q29kZXMuaW5kZXhPZihjb2RlKSA9PT0gLTEpIHtcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKGBQcm9jZXNzIGVuZGVkIHdpdGggZXhpdGNvZGUgJHtjb2RlfSAoY21kOiAnJHt0aGlzLnJlcH0nKWApKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNvbHZlKGNvZGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qXG4gICAqIFRoaXMgd2lsbCBvbmx5IHdvcmsgaWYgdGhlIHByb2Nlc3MgaXMgY3JlYXRlZCB3aXRoIHRoZSBgZGV0YWNoZWRgIG9wdGlvblxuICAgKi9cbiAgZGV0YWNoUHJvY2VzcyAoKSB7XG4gICAgaWYgKCF0aGlzLm9wdHMuZGV0YWNoZWQpIHtcbiAgICAgIC8vIHRoaXMgbWVhbnMgdGhhdCB0aGVyZSBpcyBhIG1pc2NvbmZpZ3VyYXRpb24gaW4gdGhlIGNhbGxpbmcgY29kZVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gZGV0YWNoIHByb2Nlc3MgdGhhdCBpcyBub3Qgc3RhcnRlZCB3aXRoICdkZXRhY2hlZCcgb3B0aW9uYCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnByb2MpIHtcbiAgICAgIHRoaXMucHJvYy51bnJlZigpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBwaWQgKCkge1xuICAgIHJldHVybiB0aGlzLnByb2MgPyB0aGlzLnByb2MucGlkIDogbnVsbDtcbiAgfVxu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
284
+ exports.default = _default;
285
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFdmVudEVtaXR0ZXIiLCJldmVudHMiLCJNQVhfTElORV9QT1JUSU9OX0xFTkdUSCIsImN1dFN1ZmZpeCIsInN0ciIsInN1ZmZpeExlbmd0aCIsImxlbmd0aCIsInN1YnN0ciIsIlN1YlByb2Nlc3MiLCJsYXN0TGluZVBvcnRpb24iLCJwcm9jIiwiYXJncyIsImNtZCIsIm9wdHMiLCJleHBlY3RpbmdFeGl0IiwicmVwIiwiY29uc3RydWN0b3IiLCJFcnJvciIsIl8iLCJpc1N0cmluZyIsImlzQXJyYXkiLCJxdW90ZSIsInN0ZG91dCIsInN0ZGVyciIsImlzUnVubmluZyIsImVtaXRMaW5lcyIsInN0cmVhbSIsImxpbmVzIiwibGluZSIsImVtaXQiLCJ0b1VwcGVyQ2FzZSIsInN0YXJ0Iiwic3RhcnREZXRlY3RvciIsInRpbWVvdXRNcyIsImRldGFjaCIsInN0YXJ0RGVsYXkiLCJnZW5lcmljU3RhcnREZXRlY3RvciIsImlzTnVtYmVyIiwiaXNCb29sZWFuIiwiZGV0YWNoZWQiLCJCIiwicmVzb2x2ZSIsInJlamVjdCIsInNwYXduIiwic2V0RW5jb2RpbmciLCJlbmNvZGluZyIsImhhbmRsZU91dHB1dCIsInN0cmVhbXMiLCJpc0Z1bmN0aW9uIiwiZSIsInN0cmVhbU5hbWUiLCJzdHJlYW1EYXRhIiwidG9QYWlycyIsInNwbGl0IiwibWFwIiwieCIsImxhc3QiLCJyZXN1bHRMaW5lcyIsInNsaWNlIiwiY3VycmVudFBvcnRpb24iLCJvbiIsImVyciIsInJlbW92ZUFsbExpc3RlbmVycyIsImtpbGwiLCJjb2RlIiwiZm9ybWF0RW5vZW50IiwiY3dkIiwidW5yZWYiLCJjaHVuayIsInRvU3RyaW5nIiwic2lnbmFsIiwiaGFuZGxlTGFzdExpbmVzIiwiZXZlbnQiLCJzZXRUaW1lb3V0IiwiZmluYWxseSIsImxhc3RMaW5lcyIsInN0b3AiLCJ0aW1lb3V0Iiwiam9pbiIsImFsbG93ZWRFeGl0Q29kZXMiLCJpbmRleE9mIiwiZGV0YWNoUHJvY2VzcyIsInBpZCJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9zdWJwcm9jZXNzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIHByb21pc2UvcHJlZmVyLWF3YWl0LXRvLWNhbGxiYWNrcyAqL1xuXG5pbXBvcnQgeyBzcGF3biB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IGV2ZW50cyBmcm9tICdldmVudHMnO1xuY29uc3QgeyBFdmVudEVtaXR0ZXIgfSA9IGV2ZW50cztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB7IHF1b3RlIH0gZnJvbSAnc2hlbGwtcXVvdGUnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGZvcm1hdEVub2VudCB9IGZyb20gJy4vaGVscGVycyc7XG5cblxuLy8gVGhpcyBpcyBuZWVkZWQgdG8gYXZvaWQgbWVtb3J5IGxlYWtzXG4vLyB3aGVuIHRoZSBwcm9jZXNzIG91dHB1dCBpcyB0b28gbG9uZyBhbmQgY29udGFpbnNcbi8vIG5vIGxpbmUgYnJlYWtzXG5jb25zdCBNQVhfTElORV9QT1JUSU9OX0xFTkdUSCA9IDB4RkZGRjtcblxuZnVuY3Rpb24gY3V0U3VmZml4IChzdHIsIHN1ZmZpeExlbmd0aCkge1xuICByZXR1cm4gc3RyLmxlbmd0aCA+IHN1ZmZpeExlbmd0aFxuICAgIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTI4NjlcbiAgICA/IGAgJHtzdHIuc3Vic3RyKHN0ci5sZW5ndGggLSBzdWZmaXhMZW5ndGgpfWAuc3Vic3RyKDEpXG4gICAgOiBzdHI7XG59XG5cblxuY2xhc3MgU3ViUHJvY2VzcyBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG5cbiAgLyoqXG4gICAqIEB0eXBlIHsge3N0ZG91dDogc3RyaW5nLCBzdGRlcnI6IHN0cmluZ30gfVxuICAgKi9cbiAgbGFzdExpbmVQb3J0aW9uO1xuXG4gIC8qKiBAdHlwZSB7aW1wb3J0KCdjaGlsZF9wcm9jZXNzJykuQ2hpbGRQcm9jZXNzP30gKi9cbiAgcHJvYztcblxuICAvKiogQHR5cGUge3N0cmluZ1tdfSAqL1xuICBhcmdzO1xuXG4gIC8qKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgY21kO1xuXG4gIC8qKlxuICAgKiBAdHlwZSB7YW55fVxuICAqL1xuICBvcHRzO1xuXG4gIC8qKlxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICovXG4gIGV4cGVjdGluZ0V4aXQ7XG5cbiAgLyoqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICByZXA7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbWRcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gW2FyZ3NdXG4gICAqIEBwYXJhbSB7YW55fSBbb3B0c11cbiAgICovXG4gIGNvbnN0cnVjdG9yIChjbWQsIGFyZ3MgPSBbXSwgb3B0cyA9IHt9KSB7XG4gICAgc3VwZXIoKTtcbiAgICBpZiAoIWNtZCkgdGhyb3cgbmV3IEVycm9yKCdDb21tYW5kIGlzIHJlcXVpcmVkJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY3VybHlcbiAgICBpZiAoIV8uaXNTdHJpbmcoY21kKSkgdGhyb3cgbmV3IEVycm9yKCdDb21tYW5kIG11c3QgYmUgYSBzdHJpbmcnKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjdXJseVxuICAgIGlmICghXy5pc0FycmF5KGFyZ3MpKSB0aHJvdyBuZXcgRXJyb3IoJ0FyZ3MgbXVzdCBiZSBhbiBhcnJheScpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGN1cmx5XG5cbiAgICB0aGlzLmNtZCA9IGNtZDtcbiAgICB0aGlzLmFyZ3MgPSBhcmdzO1xuICAgIHRoaXMucHJvYyA9IG51bGw7XG4gICAgdGhpcy5vcHRzID0gb3B0cztcbiAgICB0aGlzLmV4cGVjdGluZ0V4aXQgPSBmYWxzZTtcblxuICAgIC8vIGdldCBhIHF1b3RlZCByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29tbWFuZCBmb3IgZXJyb3Igc3RyaW5nc1xuICAgIHRoaXMucmVwID0gcXVvdGUoW2NtZCwgLi4uYXJnc10pO1xuXG4gICAgdGhpcy5sYXN0TGluZVBvcnRpb24gPSB7c3Rkb3V0OiAnJywgc3RkZXJyOiAnJ307XG4gIH1cblxuICBnZXQgaXNSdW5uaW5nICgpIHtcbiAgICAvLyBwcmVzZW5jZSBvZiBgcHJvY2AgbWVhbnMgd2UgaGF2ZSBjb25uZWN0ZWQgYW5kIHN0YXJ0ZWRcbiAgICByZXR1cm4gISF0aGlzLnByb2M7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmVhbVxuICAgKiBAcGFyYW0ge0l0ZXJhYmxlPHN0cmluZz59IGxpbmVzXG4gICAqL1xuICBlbWl0TGluZXMgKHN0cmVhbSwgbGluZXMpIHtcbiAgICBmb3IgKGxldCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgICB0aGlzLmVtaXQoJ3N0cmVhbS1saW5lJywgYFske3N0cmVhbS50b1VwcGVyQ2FzZSgpfV0gJHtsaW5lfWApO1xuICAgIH1cbiAgfVxuXG4gIC8vIHNwYXduIHRoZSBzdWJwcm9jZXNzIGFuZCByZXR1cm4gY29udHJvbCB3aGVuZXZlciB3ZSBkZWVtIHRoYXQgaXQgaGFzIGZ1bGx5XG4gIC8vIFwic3RhcnRlZFwiXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge1N0YXJ0RGV0ZWN0b3J8bnVtYmVyP30gc3RhcnREZXRlY3RvclxuICAgKiBAcGFyYW0ge251bWJlcj99IHRpbWVvdXRNc1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGRldGFjaFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIHN0YXJ0IChzdGFydERldGVjdG9yID0gbnVsbCwgdGltZW91dE1zID0gbnVsbCwgZGV0YWNoID0gZmFsc2UpIHtcbiAgICBsZXQgc3RhcnREZWxheSA9IDEwO1xuXG4gICAgY29uc3QgZ2VuZXJpY1N0YXJ0RGV0ZWN0b3IgPSAvKiogQHR5cGUge1N0YXJ0RGV0ZWN0b3J9ICovKGZ1bmN0aW9uIGdlbmVyaWNTdGFydERldGVjdG9yIChzdGRvdXQsIHN0ZGVycikge1xuICAgICAgcmV0dXJuIHN0ZG91dCB8fCBzdGRlcnI7XG4gICAgfSk7XG5cbiAgICAvLyB0aGUgZGVmYXVsdCBzdGFydCBkZXRlY3RvciBzaW1wbHkgcmV0dXJucyB0cnVlIHdoZW4gd2UgZ2V0IGFueSBvdXRwdXRcbiAgICBpZiAoc3RhcnREZXRlY3RvciA9PT0gbnVsbCkge1xuICAgICAgc3RhcnREZXRlY3RvciA9IGdlbmVyaWNTdGFydERldGVjdG9yO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSB1c2VyIHBhc3NlcyBhIG51bWJlciwgdGhlbiB3ZSBzaW1wbHkgZGVsYXkgYSBjZXJ0YWluIGFtb3VudCBvZlxuICAgIC8vIHRpbWUgYmVmb3JlIHJldHVybmluZyBjb250cm9sLCByYXRoZXIgdGhhbiB3YWl0aW5nIGZvciBhIGNvbmRpdGlvblxuICAgIGlmIChfLmlzTnVtYmVyKHN0YXJ0RGV0ZWN0b3IpKSB7XG4gICAgICBzdGFydERlbGF5ID0gc3RhcnREZXRlY3RvcjtcbiAgICAgIHN0YXJ0RGV0ZWN0b3IgPSBudWxsO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSB1c2VyIHBhc3NlcyBpbiBhIGJvb2xlYW4gYXMgb25lIG9mIHRoZSBhcmd1bWVudHMsIHVzZSBpdCBmb3IgYGRldGFjaGBcbiAgICBpZiAoXy5pc0Jvb2xlYW4oc3RhcnREZXRlY3RvcikgJiYgc3RhcnREZXRlY3Rvcikge1xuICAgICAgaWYgKCF0aGlzLm9wdHMuZGV0YWNoZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gZGV0YWNoIHByb2Nlc3MgdGhhdCBpcyBub3Qgc3RhcnRlZCB3aXRoICdkZXRhY2hlZCcgb3B0aW9uYCk7XG4gICAgICB9XG4gICAgICBkZXRhY2ggPSB0cnVlO1xuICAgICAgc3RhcnREZXRlY3RvciA9IGdlbmVyaWNTdGFydERldGVjdG9yO1xuICAgIH0gZWxzZSBpZiAoXy5pc0Jvb2xlYW4odGltZW91dE1zKSAmJiB0aW1lb3V0TXMpIHtcbiAgICAgIGlmICghdGhpcy5vcHRzLmRldGFjaGVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGRldGFjaCBwcm9jZXNzIHRoYXQgaXMgbm90IHN0YXJ0ZWQgd2l0aCAnZGV0YWNoZWQnIG9wdGlvbmApO1xuICAgICAgfVxuICAgICAgZGV0YWNoID0gdHJ1ZTtcbiAgICAgIHRpbWVvdXRNcyA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gcmV0dXJuIGEgcHJvbWlzZSBzbyB3ZSBjYW4gd3JhcCB0aGUgYXN5bmMgYmVoYXZpb3JcbiAgICByZXR1cm4gYXdhaXQgbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgLy8gYWN0dWFsbHkgc3Bhd24gdGhlIHN1YnByb2NcbiAgICAgIHRoaXMucHJvYyA9IHNwYXduKHRoaXMuY21kLCB0aGlzLmFyZ3MsIHRoaXMub3B0cyk7XG5cbiAgICAgIGlmICh0aGlzLnByb2Muc3Rkb3V0KSB7XG4gICAgICAgIHRoaXMucHJvYy5zdGRvdXQuc2V0RW5jb2RpbmcodGhpcy5vcHRzLmVuY29kaW5nIHx8ICd1dGY4Jyk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5wcm9jLnN0ZGVycikge1xuICAgICAgICB0aGlzLnByb2Muc3RkZXJyLnNldEVuY29kaW5nKHRoaXMub3B0cy5lbmNvZGluZyB8fCAndXRmOCcpO1xuICAgICAgfVxuICAgICAgdGhpcy5sYXN0TGluZVBvcnRpb24gPSB7c3Rkb3V0OiAnJywgc3RkZXJyOiAnJ307XG5cbiAgICAgIC8vIHRoaXMgZnVuY3Rpb24gaGFuZGxlcyBvdXRwdXQgdGhhdCB3ZSBjb2xsZWN0IGZyb20gdGhlIHN1YnByb2NcbiAgICAgIC8qKlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSB7IHtzdGRvdXQ6IHN0cmluZywgc3RkZXJyOiBzdHJpbmd9IH0gc3RyZWFtc1xuICAgICAgICovXG4gICAgICBjb25zdCBoYW5kbGVPdXRwdXQgPSAoc3RyZWFtcykgPT4ge1xuICAgICAgICBjb25zdCB7c3Rkb3V0LCBzdGRlcnJ9ID0gc3RyZWFtcztcbiAgICAgICAgLy8gaWYgd2UgaGF2ZSBhIHN0YXJ0RGV0ZWN0b3IsIHJ1biBpdCBvbiB0aGUgb3V0cHV0IHNvIHdlIGNhbiByZXNvbHZlL1xuICAgICAgICAvLyByZWplY3QgYW5kIG1vdmUgb24gZnJvbSBzdGFydFxuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmIChfLmlzRnVuY3Rpb24oc3RhcnREZXRlY3RvcikgJiYgc3RhcnREZXRlY3RvcihzdGRvdXQsIHN0ZGVycikpIHtcbiAgICAgICAgICAgIHN0YXJ0RGV0ZWN0b3IgPSBudWxsO1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGVtaXQgdGhlIGFjdHVhbCBvdXRwdXQgZm9yIHdob21ldmVyJ3MgbGlzdGVuaW5nXG4gICAgICAgIHRoaXMuZW1pdCgnb3V0cHV0Jywgc3Rkb3V0LCBzdGRlcnIpO1xuXG4gICAgICAgIC8vIHdlIGFsc28gd2FudCB0byBlbWl0IGxpbmVzLCBidXQgaXQncyBtb3JlIGNvbXBsZXggc2luY2Ugb3V0cHV0XG4gICAgICAgIC8vIGNvbWVzIGluIGNodW5rcyBhbmQgYSBsaW5lIGNvdWxkIGNvbWUgaW4gdHdvIGRpZmZlcmVudCBjaHVua3MsIHNvXG4gICAgICAgIC8vIHdlIGhhdmUgbG9naWMgdG8gaGFuZGxlIHRoYXQgY2FzZSAodXNpbmcgdGhpcy5sYXN0TGluZVBvcnRpb24gdG9cbiAgICAgICAgLy8gcmVtZW1iZXIgYSBsaW5lIHRoYXQgc3RhcnRlZCBidXQgZGlkIG5vdCBmaW5pc2ggaW4gdGhlIGxhc3QgY2h1bmspXG4gICAgICAgIGZvciAoY29uc3QgW3N0cmVhbU5hbWUsIHN0cmVhbURhdGFdIG9mIC8qKiBAdHlwZSB7W1snc3Rkb3V0Jywgc3RyaW5nXSwgWydzdGRlcnInLCBzdHJpbmddXX0gKi8oXy50b1BhaXJzKHN0cmVhbXMpKSkge1xuICAgICAgICAgIGlmICghc3RyZWFtRGF0YSkgY29udGludWU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY3VybHlcbiAgICAgICAgICBjb25zdCBsaW5lcyA9IHN0cmVhbURhdGEuc3BsaXQoJ1xcbicpXG4gICAgICAgICAgICAvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0yODY5XG4gICAgICAgICAgICAubWFwKCh4KSA9PiBgICR7eH1gLnN1YnN0cigxKSk7XG4gICAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIGxpbmVzWzBdID0gdGhpcy5sYXN0TGluZVBvcnRpb25bc3RyZWFtTmFtZV0gKyBsaW5lc1swXTtcbiAgICAgICAgICAgIHRoaXMubGFzdExpbmVQb3J0aW9uW3N0cmVhbU5hbWVdID0gY3V0U3VmZml4KF8ubGFzdChsaW5lcyksIE1BWF9MSU5FX1BPUlRJT05fTEVOR1RIKTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdExpbmVzID0gbGluZXMuc2xpY2UoMCwgLTEpO1xuICAgICAgICAgICAgdGhpcy5lbWl0KGBsaW5lcy0ke3N0cmVhbU5hbWV9YCwgcmVzdWx0TGluZXMpO1xuICAgICAgICAgICAgdGhpcy5lbWl0TGluZXMoc3RyZWFtTmFtZSwgcmVzdWx0TGluZXMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50UG9ydGlvbiA9IGN1dFN1ZmZpeChsaW5lc1swXSwgTUFYX0xJTkVfUE9SVElPTl9MRU5HVEgpO1xuICAgICAgICAgICAgaWYgKHRoaXMubGFzdExpbmVQb3J0aW9uW3N0cmVhbU5hbWVdLmxlbmd0aCArIGN1cnJlbnRQb3J0aW9uLmxlbmd0aCA+IE1BWF9MSU5FX1BPUlRJT05fTEVOR1RIKSB7XG4gICAgICAgICAgICAgIHRoaXMubGFzdExpbmVQb3J0aW9uW3N0cmVhbU5hbWVdID0gY3VycmVudFBvcnRpb247XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLmxhc3RMaW5lUG9ydGlvbltzdHJlYW1OYW1lXSArPSBjdXJyZW50UG9ydGlvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIC8vIGlmIHdlIGdldCBhbiBlcnJvciBzcGF3bmluZyB0aGUgcHJvYywgcmVqZWN0IGFuZCBjbGVhbiB1cCB0aGUgcHJvY1xuICAgICAgdGhpcy5wcm9jLm9uKCdlcnJvcicsIC8qKiBAcGFyYW0ge05vZGVKUy5FcnJub0V4Y2VwdGlvbn0gZXJyICovIChlcnIpID0+IHtcbiAgICAgICAgdGhpcy5wcm9jPy5yZW1vdmVBbGxMaXN0ZW5lcnMoJ2V4aXQnKTtcbiAgICAgICAgdGhpcy5wcm9jPy5raWxsKCdTSUdJTlQnKTtcblxuICAgICAgICBpZiAoZXJyLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICAgICAgZXJyID0gZm9ybWF0RW5vZW50KGVyciwgdGhpcy5jbWQsIHRoaXMub3B0cz8uY3dkKTtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoZXJyKTtcblxuICAgICAgICB0aGlzLnByb2M/LnVucmVmKCk7XG4gICAgICAgIHRoaXMucHJvYyA9IG51bGw7XG4gICAgICB9KTtcblxuICAgICAgaWYgKHRoaXMucHJvYy5zdGRvdXQpIHtcbiAgICAgICAgdGhpcy5wcm9jLnN0ZG91dC5vbignZGF0YScsIChjaHVuaykgPT4gaGFuZGxlT3V0cHV0KHtzdGRvdXQ6IGNodW5rLnRvU3RyaW5nKCksIHN0ZGVycjogJyd9KSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnByb2Muc3RkZXJyKSB7XG4gICAgICAgIHRoaXMucHJvYy5zdGRlcnIub24oJ2RhdGEnLCAoY2h1bmspID0+IGhhbmRsZU91dHB1dCh7c3Rkb3V0OiAnJywgc3RkZXJyOiBjaHVuay50b1N0cmluZygpfSkpO1xuICAgICAgfVxuXG4gICAgICAvLyB3aGVuIHRoZSBwcm9jIGV4aXRzLCB3ZSBtaWdodCBzdGlsbCBoYXZlIGEgYnVmZmVyIG9mIGxpbmVzIHdlIHdlcmVcbiAgICAgIC8vIHdhaXRpbmcgb24gbW9yZSBjaHVua3MgdG8gY29tcGxldGUuIEdvIGFoZWFkIGFuZCBlbWl0IHRob3NlLCB0aGVuXG4gICAgICAvLyByZS1lbWl0IHRoZSBleGl0IHNvIGEgbGlzdGVuZXIgY2FuIGhhbmRsZSB0aGUgcG9zc2libHktdW5leHBlY3RlZCBleGl0XG4gICAgICB0aGlzLnByb2Mub24oJ2V4aXQnLCAoY29kZSwgc2lnbmFsKSA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlTGFzdExpbmVzKCk7XG5cbiAgICAgICAgdGhpcy5lbWl0KCdleGl0JywgY29kZSwgc2lnbmFsKTtcblxuICAgICAgICAvLyBpbiBhZGRpdGlvbiB0byB0aGUgYmFyZSBleGl0IGV2ZW50LCBhbHNvIGVtaXQgb25lIG9mIHRocmVlIG90aGVyXG4gICAgICAgIC8vIGV2ZW50cyB0aGF0IGNvbnRhaW4gbW9yZSBoZWxwZnVsIGluZm9ybWF0aW9uOlxuICAgICAgICAvLyAnc3RvcCc6IHdlIHN0b3BwZWQgdGhpc1xuICAgICAgICAvLyAnZGllJzogdGhlIHByb2Nlc3MgZW5kZWQgb3V0IG9mIG91ciBjb250cm9sIHdpdGggYSBub24temVybyBleGl0XG4gICAgICAgIC8vICdlbmQnOiB0aGUgcHJvY2VzcyBlbmRlZCBvdXQgb2Ygb3VyIGNvbnRyb2wgd2l0aCBhIHplcm8gZXhpdFxuICAgICAgICBsZXQgZXZlbnQgPSB0aGlzLmV4cGVjdGluZ0V4aXQgPyAnc3RvcCcgOiAnZGllJztcbiAgICAgICAgaWYgKCF0aGlzLmV4cGVjdGluZ0V4aXQgJiYgY29kZSA9PT0gMCkge1xuICAgICAgICAgIGV2ZW50ID0gJ2VuZCc7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbWl0KGV2ZW50LCBjb2RlLCBzaWduYWwpO1xuXG4gICAgICAgIC8vIGZpbmFsbHkgY2xlYW4gdXAgdGhlIHByb2MgYW5kIG1ha2Ugc3VyZSB0byByZXNldCBvdXIgZXhpdFxuICAgICAgICAvLyBleHBlY3RhdGlvbnNcbiAgICAgICAgdGhpcy5wcm9jID0gbnVsbDtcbiAgICAgICAgdGhpcy5leHBlY3RpbmdFeGl0ID0gZmFsc2U7XG4gICAgICB9KTtcblxuICAgICAgLy8gaWYgdGhlIHVzZXIgaGFzbid0IGdpdmVuIHVzIGEgc3RhcnREZXRlY3RvciwgaW5zdGVhZCBqdXN0IHJlc29sdmVcbiAgICAgIC8vIHdoZW4gc3RhcnREZWxheSBtcyBoYXZlIHBhc3NlZFxuICAgICAgaWYgKCFzdGFydERldGVjdG9yKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyByZXNvbHZlKCk7IH0sIHN0YXJ0RGVsYXkpO1xuICAgICAgfVxuXG4gICAgICAvLyBpZiB0aGUgdXNlciBoYXMgZ2l2ZW4gdXMgYSB0aW1lb3V0LCBzdGFydCB0aGUgY2xvY2sgZm9yIHJlamVjdGluZ1xuICAgICAgLy8gdGhlIHByb21pc2UgaWYgd2UgdGFrZSB0b28gbG9uZyB0byBzdGFydFxuICAgICAgaWYgKF8uaXNOdW1iZXIodGltZW91dE1zKSkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKGBUaGUgcHJvY2VzcyBkaWQgbm90IHN0YXJ0IHdpdGhpbiAke3RpbWVvdXRNc31tcyBgICtcbiAgICAgICAgICAgIGAoY21kOiAnJHt0aGlzLnJlcH0nKWApKTtcbiAgICAgICAgfSwgdGltZW91dE1zKTtcbiAgICAgIH1cbiAgICB9KS5maW5hbGx5KCgpID0+IHtcbiAgICAgIGlmIChkZXRhY2ggJiYgdGhpcy5wcm9jKSB7XG4gICAgICAgIHRoaXMucHJvYy51bnJlZigpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlTGFzdExpbmVzICgpIHtcbiAgICBmb3IgKGxldCBzdHJlYW0gb2YgWydzdGRvdXQnLCAnc3RkZXJyJ10pIHtcbiAgICAgIGlmICh0aGlzLmxhc3RMaW5lUG9ydGlvbltzdHJlYW1dKSB7XG4gICAgICAgIGNvbnN0IGxhc3RMaW5lcyA9IFt0aGlzLmxhc3RMaW5lUG9ydGlvbltzdHJlYW1dXTtcbiAgICAgICAgdGhpcy5lbWl0KGBsaW5lcy0ke3N0cmVhbX1gLCBsYXN0TGluZXMpO1xuICAgICAgICB0aGlzLmVtaXRMaW5lcyhzdHJlYW0sIGxhc3RMaW5lcyk7XG4gICAgICAgIHRoaXMubGFzdExpbmVQb3J0aW9uW3N0cmVhbV0gPSAnJztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtOb2RlSlMuU2lnbmFsc30gc2lnbmFsXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lb3V0XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgYXN5bmMgc3RvcCAoc2lnbmFsID0gJ1NJR1RFUk0nLCB0aW1lb3V0ID0gMTAwMDApIHtcbiAgICBpZiAoIXRoaXMuaXNSdW5uaW5nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbid0IHN0b3AgcHJvY2VzczsgaXQncyBub3QgY3VycmVudGx5IHJ1bm5pbmcgKGNtZDogJyR7dGhpcy5yZXB9JylgKTtcbiAgICB9XG4gICAgLy8gbWFrZSBzdXJlIHRvIGVtaXQgYW55IGRhdGEgaW4gb3VyIGxpbmVzIGJ1ZmZlciB3aGVuZXZlciB3ZSdyZSBkb25lIHdpdGhcbiAgICAvLyB0aGUgcHJvY1xuICAgIHRoaXMuaGFuZGxlTGFzdExpbmVzKCk7XG4gICAgcmV0dXJuIGF3YWl0IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMucHJvYz8ub24oJ2Nsb3NlJywgcmVzb2x2ZSk7XG4gICAgICB0aGlzLmV4cGVjdGluZ0V4aXQgPSB0cnVlO1xuICAgICAgdGhpcy5wcm9jPy5raWxsKHNpZ25hbCk7XG4gICAgICAvLyB0aGlzIHRpbWVvdXQgbmVlZHMgdW5yZWYoKSBvciBub2RlIHdpbGwgd2FpdCBmb3IgdGhlIHRpbWVvdXQgdG8gZmlyZSBiZWZvcmVcbiAgICAgIC8vIGV4aXRpbmcgdGhlIHByb2Nlc3MuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgUHJvY2VzcyBkaWRuJ3QgZW5kIGFmdGVyICR7dGltZW91dH1tcyAoY21kOiAnJHt0aGlzLnJlcH0nKWApKTtcbiAgICAgIH0sIHRpbWVvdXQpLnVucmVmKCk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBqb2luIChhbGxvd2VkRXhpdENvZGVzID0gWzBdKSB7XG4gICAgaWYgKCF0aGlzLmlzUnVubmluZykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgam9pbiBwcm9jZXNzOyBpdCBpcyBub3QgY3VycmVudGx5IHJ1bm5pbmcgKGNtZDogJyR7dGhpcy5yZXB9JylgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXdhaXQgbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5wcm9jPy5vbignZXhpdCcsIChjb2RlKSA9PiB7XG4gICAgICAgIGlmIChjb2RlICE9PSBudWxsICYmIGFsbG93ZWRFeGl0Q29kZXMuaW5kZXhPZihjb2RlKSA9PT0gLTEpIHtcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKGBQcm9jZXNzIGVuZGVkIHdpdGggZXhpdGNvZGUgJHtjb2RlfSAoY21kOiAnJHt0aGlzLnJlcH0nKWApKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNvbHZlKGNvZGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qXG4gICAqIFRoaXMgd2lsbCBvbmx5IHdvcmsgaWYgdGhlIHByb2Nlc3MgaXMgY3JlYXRlZCB3aXRoIHRoZSBgZGV0YWNoZWRgIG9wdGlvblxuICAgKi9cbiAgZGV0YWNoUHJvY2VzcyAoKSB7XG4gICAgaWYgKCF0aGlzLm9wdHMuZGV0YWNoZWQpIHtcbiAgICAgIC8vIHRoaXMgbWVhbnMgdGhhdCB0aGVyZSBpcyBhIG1pc2NvbmZpZ3VyYXRpb24gaW4gdGhlIGNhbGxpbmcgY29kZVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gZGV0YWNoIHByb2Nlc3MgdGhhdCBpcyBub3Qgc3RhcnRlZCB3aXRoICdkZXRhY2hlZCcgb3B0aW9uYCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnByb2MpIHtcbiAgICAgIHRoaXMucHJvYy51bnJlZigpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBwaWQgKCkge1xuICAgIHJldHVybiB0aGlzLnByb2MgPyB0aGlzLnByb2MucGlkIDogbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgeyBTdWJQcm9jZXNzIH07XG5leHBvcnQgZGVmYXVsdCBTdWJQcm9jZXNzO1xuXG4vKipcbiAqIEBjYWxsYmFjayBTdGFydERldGVjdG9yXG4gKiBAcGFyYW0ge3N0cmluZ30gc3Rkb3V0XG4gKiBAcGFyYW0ge3N0cmluZ30gW3N0ZGVycl1cbiAqIEByZXR1cm5zIHthbnl9XG4gKi9cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFFQTs7QUFDQTs7QUFFQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFKQSxNQUFNO0VBQUVBO0FBQUYsSUFBbUJDLGVBQXpCO0FBVUEsTUFBTUMsdUJBQXVCLEdBQUcsTUFBaEM7O0FBRUEsU0FBU0MsU0FBVCxDQUFvQkMsR0FBcEIsRUFBeUJDLFlBQXpCLEVBQXVDO0VBQ3JDLE9BQU9ELEdBQUcsQ0FBQ0UsTUFBSixHQUFhRCxZQUFiLEdBRUYsSUFBR0QsR0FBRyxDQUFDRyxNQUFKLENBQVdILEdBQUcsQ0FBQ0UsTUFBSixHQUFhRCxZQUF4QixDQUFzQyxFQUExQyxDQUE0Q0UsTUFBNUMsQ0FBbUQsQ0FBbkQsQ0FGRyxHQUdISCxHQUhKO0FBSUQ7O0FBR0QsTUFBTUksVUFBTixTQUF5QlIsWUFBekIsQ0FBc0M7RUFLcENTLGVBQWU7RUFHZkMsSUFBSTtFQUdKQyxJQUFJO0VBS0pDLEdBQUc7RUFLSEMsSUFBSTtFQUtKQyxhQUFhO0VBS2JDLEdBQUc7O0VBT0hDLFdBQVcsQ0FBRUosR0FBRixFQUFPRCxJQUFJLEdBQUcsRUFBZCxFQUFrQkUsSUFBSSxH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
package/lib/exec.js CHANGED
@@ -1,5 +1,3 @@
1
- // @ts-check
2
-
3
1
  /* eslint-disable promise/prefer-await-to-callbacks */
4
2
 
5
3
  import { spawn } from 'child_process';
@@ -24,7 +22,7 @@ async function exec (cmd, args = [], opts = /** @type {T} */({})) {
24
22
 
25
23
  // extend default options; we're basically re-implementing exec's options
26
24
  // for use here with spawn under the hood
27
- opts = Object.assign({
25
+ opts = /** @type {T} */(_.defaults(opts, {
28
26
  timeout: null,
29
27
  encoding: 'utf8',
30
28
  killSignal: 'SIGTERM',
@@ -37,7 +35,9 @@ async function exec (cmd, args = [], opts = /** @type {T} */({})) {
37
35
  logger: undefined,
38
36
  maxStdoutBufferSize: MAX_BUFFER_SIZE,
39
37
  maxStderrBufferSize: MAX_BUFFER_SIZE,
40
- }, opts);
38
+ }));
39
+
40
+ const isBuffer = Boolean(opts.isBuffer);
41
41
 
42
42
  // this is an async function, so return a promise
43
43
  return await new B((resolve, reject) => {
@@ -122,7 +122,7 @@ async function exec (cmd, args = [], opts = /** @type {T} */({})) {
122
122
  if (timer) {
123
123
  clearTimeout(timer);
124
124
  }
125
- let {stdout, stderr} = getStdio(opts.isBuffer);
125
+ let {stdout, stderr} = getStdio(isBuffer);
126
126
  if (code === 0) {
127
127
  resolve(/** @type {BufferProp<T> extends true ? TeenProcessExecBufferResult : TeenProcessExecStringResult} */({stdout, stderr, code}));
128
128
  } else {
@@ -137,7 +137,7 @@ async function exec (cmd, args = [], opts = /** @type {T} */({})) {
137
137
  // have in case it's helpful in debugging
138
138
  if (opts.timeout) {
139
139
  timer = setTimeout(() => {
140
- let {stdout, stderr} = getStdio(opts.isBuffer);
140
+ let {stdout, stderr} = getStdio(isBuffer);
141
141
  let err = new Error(`Command '${rep}' timed out after ${opts.timeout}ms`);
142
142
  err = Object.assign(err, {stdout, stderr, code: null});
143
143
  reject(err);
package/lib/helpers.js CHANGED
@@ -17,7 +17,7 @@ function formatEnoent (error, cmd, cwd = null) {
17
17
  which.sync(cmd);
18
18
  if (cwd) {
19
19
  try {
20
- fs.accessSync(cwd, fs.R_OK);
20
+ fs.accessSync(cwd, fs.constants.R_OK);
21
21
  } catch (ign) {
22
22
  error.message = `The current working directory '${cwd}' for '${cmd}' command ` +
23
23
  `either does not exist or is not accessible`;
package/lib/subprocess.js CHANGED
@@ -23,6 +23,43 @@ function cutSuffix (str, suffixLength) {
23
23
 
24
24
 
25
25
  class SubProcess extends EventEmitter {
26
+
27
+ /**
28
+ * @type { {stdout: string, stderr: string} }
29
+ */
30
+ lastLinePortion;
31
+
32
+ /** @type {import('child_process').ChildProcess?} */
33
+ proc;
34
+
35
+ /** @type {string[]} */
36
+ args;
37
+
38
+ /**
39
+ * @type {string}
40
+ */
41
+ cmd;
42
+
43
+ /**
44
+ * @type {any}
45
+ */
46
+ opts;
47
+
48
+ /**
49
+ * @type {boolean}
50
+ */
51
+ expectingExit;
52
+
53
+ /**
54
+ * @type {string}
55
+ */
56
+ rep;
57
+
58
+ /**
59
+ * @param {string} cmd
60
+ * @param {string[]} [args]
61
+ * @param {any} [opts]
62
+ */
26
63
  constructor (cmd, args = [], opts = {}) {
27
64
  super();
28
65
  if (!cmd) throw new Error('Command is required'); // eslint-disable-line curly
@@ -37,6 +74,8 @@ class SubProcess extends EventEmitter {
37
74
 
38
75
  // get a quoted representation of the command for error strings
39
76
  this.rep = quote([cmd, ...args]);
77
+
78
+ this.lastLinePortion = {stdout: '', stderr: ''};
40
79
  }
41
80
 
42
81
  get isRunning () {
@@ -44,6 +83,11 @@ class SubProcess extends EventEmitter {
44
83
  return !!this.proc;
45
84
  }
46
85
 
86
+ /**
87
+ *
88
+ * @param {string} stream
89
+ * @param {Iterable<string>} lines
90
+ */
47
91
  emitLines (stream, lines) {
48
92
  for (let line of lines) {
49
93
  this.emit('stream-line', `[${stream.toUpperCase()}] ${line}`);
@@ -52,12 +96,19 @@ class SubProcess extends EventEmitter {
52
96
 
53
97
  // spawn the subprocess and return control whenever we deem that it has fully
54
98
  // "started"
99
+ /**
100
+ *
101
+ * @param {StartDetector|number?} startDetector
102
+ * @param {number?} timeoutMs
103
+ * @param {boolean} detach
104
+ * @returns {Promise<void>}
105
+ */
55
106
  async start (startDetector = null, timeoutMs = null, detach = false) {
56
107
  let startDelay = 10;
57
108
 
58
- const genericStartDetector = function genericStartDetector (stdout, stderr) {
109
+ const genericStartDetector = /** @type {StartDetector} */(function genericStartDetector (stdout, stderr) {
59
110
  return stdout || stderr;
60
- };
111
+ });
61
112
 
62
113
  // the default start detector simply returns true when we get any output
63
114
  if (startDetector === null) {
@@ -100,12 +151,16 @@ class SubProcess extends EventEmitter {
100
151
  this.lastLinePortion = {stdout: '', stderr: ''};
101
152
 
102
153
  // this function handles output that we collect from the subproc
154
+ /**
155
+ *
156
+ * @param { {stdout: string, stderr: string} } streams
157
+ */
103
158
  const handleOutput = (streams) => {
104
159
  const {stdout, stderr} = streams;
105
160
  // if we have a startDetector, run it on the output so we can resolve/
106
161
  // reject and move on from start
107
162
  try {
108
- if (startDetector && startDetector(stdout, stderr)) {
163
+ if (_.isFunction(startDetector) && startDetector(stdout, stderr)) {
109
164
  startDetector = null;
110
165
  resolve();
111
166
  }
@@ -120,7 +175,7 @@ class SubProcess extends EventEmitter {
120
175
  // comes in chunks and a line could come in two different chunks, so
121
176
  // we have logic to handle that case (using this.lastLinePortion to
122
177
  // remember a line that started but did not finish in the last chunk)
123
- for (const [streamName, streamData] of _.toPairs(streams)) {
178
+ for (const [streamName, streamData] of /** @type {[['stdout', string], ['stderr', string]]} */(_.toPairs(streams))) {
124
179
  if (!streamData) continue; // eslint-disable-line curly
125
180
  const lines = streamData.split('\n')
126
181
  // https://bugs.chromium.org/p/v8/issues/detail?id=2869
@@ -143,16 +198,16 @@ class SubProcess extends EventEmitter {
143
198
  };
144
199
 
145
200
  // if we get an error spawning the proc, reject and clean up the proc
146
- this.proc.on('error', (err) => {
147
- this.proc.removeAllListeners('exit');
148
- this.proc.kill('SIGINT');
201
+ this.proc.on('error', /** @param {NodeJS.ErrnoException} err */ (err) => {
202
+ this.proc?.removeAllListeners('exit');
203
+ this.proc?.kill('SIGINT');
149
204
 
150
- if (err.errno === 'ENOENT') {
205
+ if (err.code === 'ENOENT') {
151
206
  err = formatEnoent(err, this.cmd, this.opts?.cwd);
152
207
  }
153
208
  reject(err);
154
209
 
155
- this.proc.unref();
210
+ this.proc?.unref();
156
211
  this.proc = null;
157
212
  });
158
213
 
@@ -221,6 +276,12 @@ class SubProcess extends EventEmitter {
221
276
  }
222
277
  }
223
278
 
279
+ /**
280
+ *
281
+ * @param {NodeJS.Signals} signal
282
+ * @param {number} timeout
283
+ * @returns {Promise<void>}
284
+ */
224
285
  async stop (signal = 'SIGTERM', timeout = 10000) {
225
286
  if (!this.isRunning) {
226
287
  throw new Error(`Can't stop process; it's not currently running (cmd: '${this.rep}')`);
@@ -229,9 +290,9 @@ class SubProcess extends EventEmitter {
229
290
  // the proc
230
291
  this.handleLastLines();
231
292
  return await new B((resolve, reject) => {
232
- this.proc.on('close', resolve);
293
+ this.proc?.on('close', resolve);
233
294
  this.expectingExit = true;
234
- this.proc.kill(signal);
295
+ this.proc?.kill(signal);
235
296
  // this timeout needs unref() or node will wait for the timeout to fire before
236
297
  // exiting the process.
237
298
  setTimeout(() => {
@@ -246,8 +307,8 @@ class SubProcess extends EventEmitter {
246
307
  }
247
308
 
248
309
  return await new B((resolve, reject) => {
249
- this.proc.on('exit', (code) => {
250
- if (allowedExitCodes.indexOf(code) === -1) {
310
+ this.proc?.on('exit', (code) => {
311
+ if (code !== null && allowedExitCodes.indexOf(code) === -1) {
251
312
  reject(new Error(`Process ended with exitcode ${code} (cmd: '${this.rep}')`));
252
313
  } else {
253
314
  resolve(code);
@@ -276,3 +337,10 @@ class SubProcess extends EventEmitter {
276
337
 
277
338
  export { SubProcess };
278
339
  export default SubProcess;
340
+
341
+ /**
342
+ * @callback StartDetector
343
+ * @param {string} stdout
344
+ * @param {string} [stderr]
345
+ * @returns {any}
346
+ */
package/package.json CHANGED
@@ -1,24 +1,25 @@
1
1
  {
2
2
  "name": "teen_process",
3
+ "version": "2.0.1",
3
4
  "description": "A grown up version of Node's spawn/exec",
4
5
  "keywords": [
5
6
  "child_process",
6
- "process management"
7
+ "process management",
8
+ "subprocess",
9
+ "spawn",
10
+ "exec",
11
+ "process",
12
+ "child"
7
13
  ],
8
- "version": "2.0.0",
9
- "author": "appium",
10
- "license": "Apache-2.0",
11
- "repository": {
12
- "type": "git",
13
- "url": "https://github.com/appium/node-teen_process.git"
14
- },
15
14
  "bugs": {
16
15
  "url": "https://github.com/appium/node-teen_process/issues"
17
16
  },
18
- "engines": {
19
- "node": ">=14",
20
- "npm": ">=6"
17
+ "repository": {
18
+ "type": "git",
19
+ "url": "https://github.com/appium/node-teen_process.git"
21
20
  },
21
+ "license": "Apache-2.0",
22
+ "author": "Appium Contributors",
22
23
  "main": "./index.js",
23
24
  "bin": {},
24
25
  "directories": {
@@ -29,40 +30,72 @@
29
30
  "lib",
30
31
  "build/lib"
31
32
  ],
32
- "dependencies": {
33
- "@babel/runtime": "^7.0.0",
34
- "bluebird": "^3.5.1",
35
- "lodash": "^4.17.4",
36
- "shell-quote": "^1.4.3",
37
- "source-map-support": "^0.5.3",
38
- "which": "^2.0.2"
39
- },
40
33
  "scripts": {
41
- "clean": "rm -rf node_modules && rm -f package-lock.json && npm install",
42
- "build": "gulp transpile",
43
- "prepare": "gulp prepublish",
44
- "test": "gulp once",
45
- "watch": "gulp",
46
- "lint": "gulp eslint",
47
- "lint:fix": "gulp eslint --fix",
34
+ "build": "babel --out-dir=build/lib lib",
35
+ "dev": "npm run build -- --watch",
36
+ "lint": "eslint .",
37
+ "lint:fix": "npm run lint -- --fix",
38
+ "lint:types": "tsc",
39
+ "precommit-lint": "lint-staged",
48
40
  "precommit-msg": "echo 'Pre-commit checks...' && exit 0",
49
- "precommit-test": "REPORTER=dot gulp once"
41
+ "prepare": "npm run build",
42
+ "test": "mocha"
50
43
  },
51
44
  "pre-commit": [
52
45
  "precommit-msg",
53
- "precommit-test"
46
+ "precommit-lint"
54
47
  ],
48
+ "lint-staged": {
49
+ "*.js": [
50
+ "eslint --fix"
51
+ ]
52
+ },
53
+ "prettier": {
54
+ "bracketSpacing": false,
55
+ "printWidth": 100,
56
+ "singleQuote": true
57
+ },
58
+ "dependencies": {
59
+ "@babel/runtime": "7.18.9",
60
+ "bluebird": "3.7.2",
61
+ "lodash": "4.17.21",
62
+ "shell-quote": "1.7.3",
63
+ "source-map-support": "0.5.21",
64
+ "which": "2.0.2"
65
+ },
55
66
  "devDependencies": {
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",
63
- "chai": "^4.1.2",
64
- "chai-as-promised": "^7.1.1",
65
- "gulp": "^4.0.0",
66
- "pre-commit": "^1.2.2"
67
+ "@appium/eslint-config-appium": "6.0.4",
68
+ "@appium/support": "2.59.5",
69
+ "@babel/cli": "7.18.10",
70
+ "@babel/core": "7.18.10",
71
+ "@babel/eslint-parser": "7.18.9",
72
+ "@babel/plugin-transform-runtime": "7.18.10",
73
+ "@babel/preset-env": "7.18.10",
74
+ "@babel/register": "7.18.9",
75
+ "@types/bluebird": "3.5.36",
76
+ "@types/chai": "4.3.3",
77
+ "@types/chai-as-promised": "7.1.5",
78
+ "@types/lodash": "4.14.182",
79
+ "@types/mocha": "9.1.1",
80
+ "@types/node": "18.6.5",
81
+ "@types/shell-quote": "1.7.1",
82
+ "@types/which": "2.0.1",
83
+ "babel-plugin-source-map-support": "2.2.0",
84
+ "chai": "4.3.6",
85
+ "chai-as-promised": "7.1.1",
86
+ "eslint": "7.32.0",
87
+ "eslint-config-prettier": "8.5.0",
88
+ "eslint-plugin-import": "2.26.0",
89
+ "eslint-plugin-mocha": "9.0.0",
90
+ "eslint-plugin-promise": "6.0.0",
91
+ "lint-staged": "13.0.3",
92
+ "mocha": "10.0.0",
93
+ "pre-commit": "1.2.2",
94
+ "prettier": "2.7.1",
95
+ "typescript": "4.7.4"
96
+ },
97
+ "engines": {
98
+ "node": ">=14",
99
+ "npm": ">=6"
67
100
  }
68
101
  }