specmatic 0.78.0 → 0.78.2
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/dist/core/index.js
CHANGED
|
@@ -10,9 +10,9 @@ var _fastXmlParser = require("fast-xml-parser");
|
|
|
10
10
|
var _fs = _interopRequireDefault(require("fs"));
|
|
11
11
|
var _logger = _interopRequireDefault(require("../common/logger"));
|
|
12
12
|
var _runner = require("../common/runner");
|
|
13
|
-
var _promise = _interopRequireDefault(require("terminate/promise"));
|
|
14
13
|
var _expressListEndpoints = _interopRequireDefault(require("express-list-endpoints"));
|
|
15
14
|
var _http = _interopRequireDefault(require("http"));
|
|
15
|
+
var _shutdownUtils = require("./shutdownUtils");
|
|
16
16
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
17
17
|
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
18
18
|
function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator["return"] && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, "catch": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
|
|
@@ -84,11 +84,13 @@ var stopStub = /*#__PURE__*/function () {
|
|
|
84
84
|
(_javaProcess$stdout = javaProcess.stdout) === null || _javaProcess$stdout === void 0 || _javaProcess$stdout.removeAllListeners();
|
|
85
85
|
(_javaProcess$stderr = javaProcess.stderr) === null || _javaProcess$stderr === void 0 || _javaProcess$stderr.removeAllListeners();
|
|
86
86
|
javaProcess.removeAllListeners('close');
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
_logger["default"].info("Stub: Stopped server at ".concat(stub.url));
|
|
87
|
+
_logger["default"].debug('Trying to stop stub process gracefully ...');
|
|
88
|
+
_context.next = 8;
|
|
89
|
+
return (0, _shutdownUtils.gracefulShutdown)(javaProcess);
|
|
91
90
|
case 8:
|
|
91
|
+
_logger["default"].debug('Completed graceful termination of the stub process');
|
|
92
|
+
_logger["default"].info("Stub: Stopped server at ".concat(stub.url));
|
|
93
|
+
case 10:
|
|
92
94
|
case "end":
|
|
93
95
|
return _context.stop();
|
|
94
96
|
}
|
|
@@ -292,4 +294,4 @@ function extractEndPoints(expressApp) {
|
|
|
292
294
|
});
|
|
293
295
|
return springActuatorPayload;
|
|
294
296
|
}
|
|
295
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYXhpb3MiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9wYXRoIiwiX2Zhc3RYbWxQYXJzZXIiLCJfZnMiLCJfbG9nZ2VyIiwiX3J1bm5lciIsIl9wcm9taXNlIiwiX2V4cHJlc3NMaXN0RW5kcG9pbnRzIiwiX2h0dHAiLCJvYmoiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsIm8iLCJTeW1ib2wiLCJpdGVyYXRvciIsImNvbnN0cnVjdG9yIiwicHJvdG90eXBlIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsImUiLCJ0IiwiciIsIk9iamVjdCIsIm4iLCJoYXNPd25Qcm9wZXJ0eSIsImRlZmluZVByb3BlcnR5IiwidmFsdWUiLCJpIiwiYSIsImMiLCJhc3luY0l0ZXJhdG9yIiwidSIsInRvU3RyaW5nVGFnIiwiZGVmaW5lIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwid3JhcCIsIkdlbmVyYXRvciIsImNyZWF0ZSIsIkNvbnRleHQiLCJtYWtlSW52b2tlTWV0aG9kIiwidHJ5Q2F0Y2giLCJ0eXBlIiwiYXJnIiwiY2FsbCIsImgiLCJsIiwiZiIsInMiLCJ5IiwiR2VuZXJhdG9yRnVuY3Rpb24iLCJHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSIsInAiLCJkIiwiZ2V0UHJvdG90eXBlT2YiLCJ2IiwidmFsdWVzIiwiZyIsImRlZmluZUl0ZXJhdG9yTWV0aG9kcyIsImZvckVhY2giLCJfaW52b2tlIiwiQXN5bmNJdGVyYXRvciIsImludm9rZSIsInJlc29sdmUiLCJfX2F3YWl0IiwidGhlbiIsImNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnIiwiRXJyb3IiLCJkb25lIiwibWV0aG9kIiwiZGVsZWdhdGUiLCJtYXliZUludm9rZURlbGVnYXRlIiwic2VudCIsIl9zZW50IiwiZGlzcGF0Y2hFeGNlcHRpb24iLCJhYnJ1cHQiLCJUeXBlRXJyb3IiLCJyZXN1bHROYW1lIiwibmV4dCIsIm5leHRMb2MiLCJwdXNoVHJ5RW50cnkiLCJ0cnlMb2MiLCJjYXRjaExvYyIsImZpbmFsbHlMb2MiLCJhZnRlckxvYyIsInRyeUVudHJpZXMiLCJwdXNoIiwicmVzZXRUcnlFbnRyeSIsImNvbXBsZXRpb24iLCJyZXNldCIsImlzTmFOIiwibGVuZ3RoIiwiZGlzcGxheU5hbWUiLCJpc0dlbmVyYXRvckZ1bmN0aW9uIiwibmFtZSIsIm1hcmsiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsImF3cmFwIiwiYXN5bmMiLCJQcm9taXNlIiwia2V5cyIsInJldmVyc2UiLCJwb3AiLCJwcmV2IiwiY2hhckF0Iiwic2xpY2UiLCJzdG9wIiwicnZhbCIsImhhbmRsZSIsImNvbXBsZXRlIiwiZmluaXNoIiwiX2NhdGNoIiwiZGVsZWdhdGVZaWVsZCIsImFzeW5jR2VuZXJhdG9yU3RlcCIsImdlbiIsInJlamVjdCIsIl9uZXh0IiwiX3Rocm93Iiwia2V5IiwiaW5mbyIsImVycm9yIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJmbiIsInNlbGYiLCJhcmdzIiwiYXJndW1lbnRzIiwiYXBwbHkiLCJlcnIiLCJ1bmRlZmluZWQiLCJfZGVmaW5lUHJvcGVydGllcyIsInRhcmdldCIsInByb3BzIiwiZGVzY3JpcHRvciIsIl90b1Byb3BlcnR5S2V5IiwiX2NyZWF0ZUNsYXNzIiwiQ29uc3RydWN0b3IiLCJwcm90b1Byb3BzIiwic3RhdGljUHJvcHMiLCJfY2xhc3NDYWxsQ2hlY2siLCJpbnN0YW5jZSIsIl9kZWZpbmVQcm9wZXJ0eSIsIl90b1ByaW1pdGl2ZSIsIlN0cmluZyIsImlucHV0IiwiaGludCIsInByaW0iLCJ0b1ByaW1pdGl2ZSIsInJlcyIsIk51bWJlciIsIlN0dWIiLCJob3N0IiwicG9ydCIsInVybCIsInByb2Nlc3MiLCJleHBvcnRzIiwic3RhcnRTdHViIiwiY21kIiwiY29uY2F0Iiwiam9pbiIsImxvZ2dlciIsImRlYnVnIiwiamF2YVByb2Nlc3MiLCJjYWxsQ29yZSIsIm1lc3NhZ2UiLCJpbmRleE9mIiwic3R1YkluZm8iLCJzcGxpdCIsIl91cmxJbmZvJGxlbmd0aCIsInRyaW0iLCJ1cmxJbmZvIiwiZXhlYyIsInBhcnNlSW50Iiwic3RvcFN0dWIiLCJfcmVmIiwiX2NhbGxlZSIsInN0dWIiLCJfamF2YVByb2Nlc3Mkc3Rkb3V0IiwiX2phdmFQcm9jZXNzJHN0ZGVyciIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJzdGRvdXQiLCJyZW1vdmVBbGxMaXN0ZW5lcnMiLCJzdGRlcnIiLCJ0ZXJtaW5hdGUiLCJwaWQiLCJfeCIsInRlc3RXaXRoQXBpQ292ZXJhZ2UiLCJfcmVmMiIsIl9jYWxsZWUzIiwiZXhwcmVzc0FwcCIsImNvbnRyYWN0UGF0aCIsIl9jYWxsZWUzJCIsIl9jb250ZXh0MyIsIl9yZWYzIiwiX2NhbGxlZTIiLCJfcmVqZWN0IiwiYXBpQ292ZXJhZ2VTZXJ2ZXIiLCJyZXN1bHRzIiwiX2NhbGxlZTIkIiwiX2NvbnRleHQyIiwic3RhcnRBcGlDb3ZlcmFnZVNlcnZlciIsInRlc3QiLCJjbG9zZSIsIl94NyIsIl94OCIsIl94MiIsIl94MyIsIl94NCIsIl94NSIsIl94NiIsInNwZWNzUGF0aCIsInBhdGgiLCJyZXBvcnREaXIiLCJmcyIsInJtU3luYyIsInJlY3Vyc2l2ZSIsImZvcmNlIiwidGVzdENhc2VzIiwicGFyc2VKdW5pdFhNTCIsInRvdGFsIiwiZmFpbHVyZSIsImZpbHRlciIsInRlc3RjYXNlIiwic3VjY2VzcyIsInJlc3VsdCIsImNvbnNvbGUiLCJsb2ciLCJzaG93VGVzdFJlc3VsdHMiLCJ0ZXN0Rm4iLCJtYXAiLCJuYW1lVGVtcEFyciIsInJlcGxhY2UiLCJza2lwcGVkIiwic2V0RXhwZWN0YXRpb25zIiwic3R1YlBhdGgiLCJzdHViU2VydmVyQmFzZVVybCIsInN0dWJSZXNwb25zZSIsImF4aW9zIiwicG9zdCIsInJlc3BvbnNlIiwiZGF0YSIsInByaW50SmFyVmVyc2lvbiIsImFwcCIsImh0dHAiLCJjcmVhdGVTZXJ2ZXIiLCJfcmVxIiwid3JpdGVIZWFkIiwiZW5kUG9pbnRzIiwiSlNPTiIsInN0cmluZ2lmeSIsImV4dHJhY3RFbmRQb2ludHMiLCJlbmQiLCJvbiIsImxpc3RlbiIsImFkZHJlc3MiLCJlbnYiLCJyZXBvcnRQYXRoIiwicmVhZEZpbGVTeW5jIiwicGFyc2VyIiwiWE1MUGFyc2VyIiwicmVzdWx0WG1sIiwicGFyc2UiLCJ0ZXN0c3VpdGUiLCJBcnJheSIsImlzQXJyYXkiLCJsaXN0RW5kUG9pbnRzIiwiZGV0YWlscyIsImxpc3RFeHByZXNzRW5kcG9pbnRzIiwiYXBpRGV0YWlsIiwibWV0aG9kcyIsInNwcmluZ0FjdHVhdG9yUGF5bG9hZCIsImNvbnRleHRzIiwiYXBwbGljYXRpb24iLCJtYXBwaW5ncyIsImRpc3BhdGNoZXJTZXJ2bGV0cyIsImRpc3BhdGNoZXJTZXJ2bGV0Iiwic29ydCIsInJlcXVlc3RNYXBwaW5nQ29uZGl0aW9ucyIsInBhdHRlcm5zIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvcmUvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJ1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcbmltcG9ydCB7IENoaWxkUHJvY2VzcyB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnXG5pbXBvcnQgeyBYTUxQYXJzZXIgfSBmcm9tICdmYXN0LXhtbC1wYXJzZXInXG5pbXBvcnQgZnMgZnJvbSAnZnMnXG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4uL2NvbW1vbi9sb2dnZXInXG5pbXBvcnQgeyBjYWxsQ29yZSB9IGZyb20gJy4uL2NvbW1vbi9ydW5uZXInXG5pbXBvcnQgdGVybWluYXRlIGZyb20gJ3Rlcm1pbmF0ZS9wcm9taXNlJ1xuaW1wb3J0IGxpc3RFeHByZXNzRW5kcG9pbnRzIGZyb20gJ2V4cHJlc3MtbGlzdC1lbmRwb2ludHMnXG5pbXBvcnQgaHR0cCBmcm9tICdodHRwJ1xuaW1wb3J0IHsgQWRkcmVzc0luZm8gfSBmcm9tICduZXQnXG5cbmV4cG9ydCBjbGFzcyBTdHViIHtcbiAgICBob3N0OiBzdHJpbmdcbiAgICBwb3J0OiBudW1iZXJcbiAgICB1cmw6IHN0cmluZ1xuICAgIHByb2Nlc3M6IENoaWxkUHJvY2Vzc1xuICAgIGNvbnN0cnVjdG9yKGhvc3Q6IHN0cmluZywgcG9ydDogbnVtYmVyLCB1cmw6IHN0cmluZywgcHJvY2VzczogQ2hpbGRQcm9jZXNzKSB7XG4gICAgICAgIHRoaXMuaG9zdCA9IGhvc3RcbiAgICAgICAgdGhpcy5wb3J0ID0gcG9ydFxuICAgICAgICB0aGlzLnVybCA9IHVybFxuICAgICAgICB0aGlzLnByb2Nlc3MgPSBwcm9jZXNzXG4gICAgfVxufVxuXG5jb25zdCBzdGFydFN0dWIgPSAoaG9zdD86IHN0cmluZywgcG9ydD86IG51bWJlciwgYXJncz86IChzdHJpbmcgfCBudW1iZXIpW10pOiBQcm9taXNlPFN0dWI+ID0+IHtcbiAgICB2YXIgY21kID0gYHN0dWJgXG4gICAgaWYgKGhvc3QpIGNtZCArPSBgIC0taG9zdD0ke2hvc3R9YFxuICAgIGlmIChwb3J0KSBjbWQgKz0gYCAtLXBvcnQ9JHtwb3J0fWBcbiAgICBpZiAoYXJncykgY21kICs9ICcgJyArIGFyZ3Muam9pbignICcpXG5cbiAgICBsb2dnZXIuaW5mbygnU3R1YjogU3RhcnRpbmcgc2VydmVyJylcbiAgICBsb2dnZXIuZGVidWcoYFN0dWI6IEV4ZWN1dGluZyBcIiR7Y21kfVwiYClcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGphdmFQcm9jZXNzID0gY2FsbENvcmUoXG4gICAgICAgICAgICBjbWQsXG4gICAgICAgICAgICAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihgU3R1YjogRXhpdGVkIHdpdGggZXJyb3IgJHtlcnJ9YClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgKG1lc3NhZ2UsIGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5pbmRleE9mKCdTdHViIHNlcnZlciBpcyBydW5uaW5nJykgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYFN0dWI6ICR7bWVzc2FnZX1gKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3R1YkluZm8gPSBtZXNzYWdlLnNwbGl0KCdvbicpXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3R1YkluZm8ubGVuZ3RoIDwgMikgcmVqZWN0KCdDYW5ub3QgZGV0ZXJtaW5lIHVybCBmcm9tIHN0dWIgb3V0cHV0JylcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVybCA9IHN0dWJJbmZvWzFdLnRyaW0oKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVybEluZm8gPSAvKC4qPyk6XFwvXFwvKC4qPyk6KFswLTldKykvLmV4ZWModXJsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgodXJsSW5mbz8ubGVuZ3RoID8/IDApIDwgNCkgcmVqZWN0KCdDYW5ub3QgZGV0ZXJtaW5lIGhvc3QgYW5kIHBvcnQgZnJvbSBzdHViIG91dHB1dCcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSByZXNvbHZlKG5ldyBTdHViKHVybEluZm8hWzJdLCBwYXJzZUludCh1cmxJbmZvIVszXSksIHVybEluZm8hWzBdLCBqYXZhUHJvY2VzcykpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobWVzc2FnZS5pbmRleE9mKCdBZGRyZXNzIGFscmVhZHkgaW4gdXNlJykgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGBTdHViOiAke21lc3NhZ2V9YClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdCgnQWRkcmVzcyBhbHJlYWR5IGluIHVzZScpXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoYFN0dWI6ICR7bWVzc2FnZX1gKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGBTdHViOiAke21lc3NhZ2V9YClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIClcbiAgICB9KVxufVxuXG5jb25zdCBzdG9wU3R1YiA9IGFzeW5jIChzdHViOiBTdHViKSA9PiB7XG4gICAgbG9nZ2VyLmRlYnVnKGBTdHViOiBTdG9wcGluZyBzZXJ2ZXIgYXQgJHtzdHViLnVybH1gKVxuICAgIGNvbnN0IGphdmFQcm9jZXNzID0gc3R1Yi5wcm9jZXNzXG4gICAgamF2YVByb2Nlc3Muc3Rkb3V0Py5yZW1vdmVBbGxMaXN0ZW5lcnMoKVxuICAgIGphdmFQcm9jZXNzLnN0ZGVycj8ucmVtb3ZlQWxsTGlzdGVuZXJzKClcbiAgICBqYXZhUHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMoJ2Nsb3NlJylcbiAgICBhd2FpdCB0ZXJtaW5hdGUoamF2YVByb2Nlc3MucGlkISlcbiAgICBsb2dnZXIuaW5mbyhgU3R1YjogU3RvcHBlZCBzZXJ2ZXIgYXQgJHtzdHViLnVybH1gKVxufVxuXG5jb25zdCB0ZXN0V2l0aEFwaUNvdmVyYWdlID0gYXN5bmMgKFxuICAgIGV4cHJlc3NBcHA6IGFueSxcbiAgICBob3N0Pzogc3RyaW5nLFxuICAgIHBvcnQ/OiBudW1iZXIsXG4gICAgY29udHJhY3RQYXRoPzogc3RyaW5nLFxuICAgIGFyZ3M/OiAoc3RyaW5nIHwgbnVtYmVyKVtdXG4pOiBQcm9taXNlPHsgW2s6IHN0cmluZ106IG51bWJlciB9IHwgdW5kZWZpbmVkPiA9PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCBfcmVqZWN0KSA9PiB7XG4gICAgICAgIGxldCBhcGlDb3ZlcmFnZVNlcnZlciA9IGF3YWl0IHN0YXJ0QXBpQ292ZXJhZ2VTZXJ2ZXIoZXhwcmVzc0FwcClcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHRlc3QoaG9zdCwgcG9ydCwgY29udHJhY3RQYXRoLCBhcmdzKVxuICAgICAgICBhcGlDb3ZlcmFnZVNlcnZlci5jbG9zZSgoKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdHMpXG4gICAgICAgIH0pXG4gICAgfSlcbn1cblxuY29uc3QgdGVzdCA9IChob3N0Pzogc3RyaW5nLCBwb3J0PzogbnVtYmVyLCBjb250cmFjdFBhdGg/OiBzdHJpbmcsIGFyZ3M/OiAoc3RyaW5nIHwgbnVtYmVyKVtdKTogUHJvbWlzZTx7IFtrOiBzdHJpbmddOiBudW1iZXIgfSB8IHVuZGVmaW5lZD4gPT4ge1xuICAgIGNvbnN0IHNwZWNzUGF0aCA9IHBhdGgucmVzb2x2ZShjb250cmFjdFBhdGggKyAnJylcblxuICAgIHZhciBjbWQgPSBgdGVzdGBcbiAgICBpZiAoY29udHJhY3RQYXRoKSBjbWQgKz0gYCAke3NwZWNzUGF0aH1gXG4gICAgY21kICs9ICcgLS1qdW5pdFJlcG9ydERpcj1kaXN0L3Rlc3QtcmVwb3J0J1xuICAgIGlmIChob3N0KSBjbWQgKz0gYCAtLWhvc3Q9JHtob3N0fWBcbiAgICBpZiAocG9ydCkgY21kICs9IGAgLS1wb3J0PSR7cG9ydH1gXG4gICAgaWYgKGFyZ3MpIGNtZCArPSAnICcgKyBhcmdzLmpvaW4oJyAnKVxuXG4gICAgbG9nZ2VyLmluZm8oJ1Rlc3Q6IFJ1bm5pbmcnKVxuICAgIGxvZ2dlci5kZWJ1ZyhgVGVzdDogRXhlY3V0aW5nIFwiJHtjbWR9XCJgKVxuXG4gICAgY29uc3QgcmVwb3J0RGlyID0gcGF0aC5yZXNvbHZlKCdkaXN0L3Rlc3QtcmVwb3J0JylcbiAgICBmcy5ybVN5bmMocmVwb3J0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSlcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgX3JlamVjdCkgPT4ge1xuICAgICAgICBjYWxsQ29yZShcbiAgICAgICAgICAgIGNtZCxcbiAgICAgICAgICAgIChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIGxvZ2dlci5lcnJvcihgVGVzdDogRmFpbGVkIHdpdGggZXJyb3IgJHtlcnJ9YClcbiAgICAgICAgICAgICAgICB2YXIgdGVzdENhc2VzID0gcGFyc2VKdW5pdFhNTCgpXG4gICAgICAgICAgICAgICAgY29uc3QgdG90YWwgPSB0ZXN0Q2FzZXMubGVuZ3RoXG4gICAgICAgICAgICAgICAgY29uc3QgZmFpbHVyZSA9IHRlc3RDYXNlcy5maWx0ZXIoKHRlc3RjYXNlOiB7IFtpZDogc3RyaW5nXTogYW55IH0pID0+IHRlc3RjYXNlWydmYWlsdXJlJ10gfHwgdGVzdGNhc2VbJ3NraXBwZWQnXSkubGVuZ3RoXG4gICAgICAgICAgICAgICAgY29uc3Qgc3VjY2VzcyA9IHRvdGFsIC0gZmFpbHVyZVxuICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSB7IHRvdGFsLCBzdWNjZXNzLCBmYWlsdXJlIH1cbiAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdClcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAobWVzc2FnZSwgZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5pbmRleE9mKCdBUEkgQ09WRVJBR0UgU1VNTUFSWScpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cobWVzc2FnZSkgLy9Mb2cgYWx3YXlzIGZvciBhbGwgbG9nIGxldmVsc1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlcltlcnJvciA/ICdlcnJvcicgOiAnZGVidWcnXShgVGVzdDogJHttZXNzYWdlfWApXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICApXG4gICAgfSlcbn1cblxuY29uc3Qgc2hvd1Rlc3RSZXN1bHRzID0gKHRlc3RGbjogKG5hbWU6IHN0cmluZywgY2I6ICgpID0+IHZvaWQpID0+IHZvaWQpID0+IHtcbiAgICB2YXIgdGVzdENhc2VzID0gcGFyc2VKdW5pdFhNTCgpXG4gICAgdGVzdENhc2VzLm1hcChmdW5jdGlvbiAodGVzdGNhc2U6IHsgW2lkOiBzdHJpbmddOiBhbnkgfSkge1xuICAgICAgICB2YXIgbmFtZSA9ICdObyBOYW1lJ1xuICAgICAgICBpZiAodGVzdGNhc2VbJ3N5c3RlbS1vdXQnXSkge1xuICAgICAgICAgICAgY29uc3QgbmFtZVRlbXBBcnIgPSB0ZXN0Y2FzZVsnc3lzdGVtLW91dCddXG4gICAgICAgICAgICAgICAgLnRyaW0oKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXG4vZywgJycpXG4gICAgICAgICAgICAgICAgLnNwbGl0KC9kaXNwbGF5LW5hbWU6LipTY2VuYXJpbzogLylcbiAgICAgICAgICAgIGlmIChuYW1lVGVtcEFyci5sZW5ndGggPiAxKSBuYW1lID0gbmFtZVRlbXBBcnJbMV0udHJpbSgpXG4gICAgICAgIH1cbiAgICAgICAgdGVzdEZuKG5hbWUsICgpID0+IHtcbiAgICAgICAgICAgIGlmICh0ZXN0Y2FzZS5mYWlsdXJlIHx8IHRlc3RjYXNlLnNraXBwZWQpIHRocm93IG5ldyBFcnJvcignRGlkIG5vdCBwYXNzJylcbiAgICAgICAgfSlcbiAgICB9KVxufVxuXG5jb25zdCBzZXRFeHBlY3RhdGlvbnMgPSAoc3R1YlBhdGg6IHN0cmluZywgc3R1YlNlcnZlckJhc2VVcmw/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBjb25zdCBzdHViUmVzcG9uc2UgPSByZXF1aXJlKHBhdGgucmVzb2x2ZShzdHViUGF0aCkpXG4gICAgc3R1YlNlcnZlckJhc2VVcmwgPSBzdHViU2VydmVyQmFzZVVybCB8fCAnaHR0cDovL2xvY2FsaG9zdDo5MDAwJ1xuXG4gICAgbG9nZ2VyLmluZm8oYFNldCBFeHBlY3RhdGlvbnM6IFN0dWIgdXJsIGlzICR7c3R1YlNlcnZlckJhc2VVcmx9YClcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGF4aW9zXG4gICAgICAgICAgICAucG9zdChgJHtzdHViU2VydmVyQmFzZVVybH0vX3NwZWNtYXRpYy9leHBlY3RhdGlvbnNgLCBzdHViUmVzcG9uc2UpXG4gICAgICAgICAgICAudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKGBTZXQgRXhwZWN0YXRpb25zOiAke3Jlc3BvbnNlLmRhdGF9YClcbiAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygnU2V0IEV4cGVjdGF0aW9uczogRmluaXNoZWQnKVxuICAgICAgICAgICAgICAgIHJlc29sdmUoKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihgU2V0IEV4cGVjdGF0aW9uczogRmFpbGVkIHdpdGggZXJyb3IgJHtlcnJ9YClcbiAgICAgICAgICAgICAgICByZWplY3QoYFNldHRpbmcgZXhwZWNhdGlvbiBmYWlsZWQgd2l0aCBlcnJvciAke2Vycn1gKVxuICAgICAgICAgICAgfSlcbiAgICB9KVxufVxuXG5jb25zdCBwcmludEphclZlcnNpb24gPSAoKSA9PiB7XG4gICAgY29uc3QgY21kID0gYC0tdmVyc2lvbmBcbiAgICBsb2dnZXIuaW5mbygnUHJpbnQgSmFyIFZlcnNpb246IFJ1bm5pbmcnKVxuICAgIGxvZ2dlci5kZWJ1ZyhgUHJpbnQgSmFyIFZlcnNpb246IEV4ZWN1dGluZyBcIiR7Y21kfVwiYClcblxuICAgIGNhbGxDb3JlKFxuICAgICAgICBjbWQsXG4gICAgICAgIChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKGVycikgbG9nZ2VyLmVycm9yKGBQcmludCBKYXIgVmVyc2lvbjogRmFpbGVkIHdpdGggZXJyb3IgJHtlcnJ9YClcbiAgICAgICAgfSxcbiAgICAgICAgKG1lc3NhZ2UsIGVycm9yKSA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyb3IpIGxvZ2dlci5lcnJvcihgUHJpbnQgSmFyIFZlcnNpb246ICR7bWVzc2FnZX1gKVxuICAgICAgICAgICAgZWxzZSBjb25zb2xlLmxvZyhgJHttZXNzYWdlfWApXG4gICAgICAgIH1cbiAgICApXG59XG5cbmNvbnN0IHN0YXJ0QXBpQ292ZXJhZ2VTZXJ2ZXIgPSAoZXhwcmVzc0FwcDogYW55KTogUHJvbWlzZTxodHRwLlNlcnZlcj4gPT4ge1xuICAgIGxvZ2dlci5kZWJ1ZyhgUmVnaXN0ZXJpbmcgQVBJIGVuZHBvaW50IGZvciBjb3ZlcmFnZWApXG4gICAgbGV0IGFwcCA9IGh0dHAuY3JlYXRlU2VydmVyKChfcmVxLCByZXMpID0+IHtcbiAgICAgICAgcmVzLndyaXRlSGVhZCgyMDAsIHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9KVxuICAgICAgICBjb25zdCBlbmRQb2ludHMgPSBKU09OLnN0cmluZ2lmeShleHRyYWN0RW5kUG9pbnRzKGV4cHJlc3NBcHApKVxuICAgICAgICBsb2dnZXIuZGVidWcoYEVuZHBvaW50czogJHtlbmRQb2ludHN9YClcbiAgICAgICAgcmVzLmVuZChlbmRQb2ludHMpXG4gICAgfSlcbiAgICByZXR1cm4gbmV3IFByb21pc2U8aHR0cC5TZXJ2ZXI+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgYXBwLm9uKCdlcnJvcicsIGVyciA9PiB7XG4gICAgICAgICAgICBsb2dnZXIuZXJyb3IoJ0Vycm9yIHdoaWxlIHN0YXJ0aW5nIGVuZCBwb2ludHMgc2VydmVyIGZvciBhcGkgY292ZXJhZ2UnLCBlcnIpXG4gICAgICAgICAgICByZWplY3QoJ0Vycm9yIHdoaWxlIHN0YXJ0aW5nIGVuZCBwb2ludHMgc2VydmVyIGZvciBhcGkgY292ZXJhZ2UnKVxuICAgICAgICB9KVxuICAgICAgICBhcHAubGlzdGVuKHsgaG9zdDogJzEyNy4wLjAuMScsIHBvcnQ6IDAgfSwgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYWRkcmVzcyA9IGFwcC5hZGRyZXNzKCkgYXMgQWRkcmVzc0luZm8gfCBudWxsXG4gICAgICAgICAgICBwcm9jZXNzLmVudlsnZW5kcG9pbnRzQVBJJ10gPSBgaHR0cDovLyR7YWRkcmVzcz8uYWRkcmVzc306JHthZGRyZXNzPy5wb3J0fWBcbiAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBFbmRwb2ludHMgQVBJIHJlZ2lzdGVyZWQgYXQgJHtwcm9jZXNzLmVudlsnZW5kcG9pbnRzQVBJJ119YClcbiAgICAgICAgICAgIHJlc29sdmUoYXBwKVxuICAgICAgICB9KVxuICAgIH0pXG59XG5cbmNvbnN0IHBhcnNlSnVuaXRYTUwgPSAoKSA9PiB7XG4gICAgY29uc3QgcmVwb3J0UGF0aCA9IHBhdGgucmVzb2x2ZSgnZGlzdC90ZXN0LXJlcG9ydC9URVNULWp1bml0LWp1cGl0ZXIueG1sJylcbiAgICB2YXIgZGF0YSA9IGZzLnJlYWRGaWxlU3luYyhyZXBvcnRQYXRoKVxuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBYTUxQYXJzZXIoKVxuICAgIHZhciByZXN1bHRYbWwgPSBwYXJzZXIucGFyc2UoZGF0YSlcbiAgICByZXN1bHRYbWwudGVzdHN1aXRlLnRlc3RjYXNlID0gQXJyYXkuaXNBcnJheShyZXN1bHRYbWwudGVzdHN1aXRlLnRlc3RjYXNlKSA/IHJlc3VsdFhtbC50ZXN0c3VpdGUudGVzdGNhc2UgOiBbcmVzdWx0WG1sLnRlc3RzdWl0ZS50ZXN0Y2FzZV1cbiAgICByZXR1cm4gcmVzdWx0WG1sLnRlc3RzdWl0ZS50ZXN0Y2FzZVxufVxuXG5jb25zdCBsaXN0RW5kUG9pbnRzID0gKGV4cHJlc3NBcHA6IGFueSk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nW10gfSA9PiB7XG4gICAgY29uc3QgZGV0YWlscyA9IGxpc3RFeHByZXNzRW5kcG9pbnRzKGV4cHJlc3NBcHApXG4gICAgbGV0IGVuZFBvaW50czogeyBba2V5OiBzdHJpbmddOiBzdHJpbmdbXSB9ID0ge31cbiAgICBkZXRhaWxzLm1hcChhcGlEZXRhaWwgPT4ge1xuICAgICAgICBlbmRQb2ludHNbYXBpRGV0YWlsLnBhdGhdID0gYXBpRGV0YWlsLm1ldGhvZHNcbiAgICB9KVxuICAgIGRlbGV0ZSBlbmRQb2ludHNbJyonXVxuICAgIHJldHVybiBlbmRQb2ludHNcbn1cblxuZnVuY3Rpb24gZXh0cmFjdEVuZFBvaW50cyhleHByZXNzQXBwOiBhbnkpIHtcbiAgICBsZXQgZW5kUG9pbnRzID0gbGlzdEVuZFBvaW50cyhleHByZXNzQXBwKVxuICAgIGxldCBzcHJpbmdBY3R1YXRvclBheWxvYWQgPSB7XG4gICAgICAgIGNvbnRleHRzOiB7XG4gICAgICAgICAgICBhcHBsaWNhdGlvbjoge1xuICAgICAgICAgICAgICAgIG1hcHBpbmdzOiB7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoZXJTZXJ2bGV0czoge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hlclNlcnZsZXQ6IFtdLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH1cbiAgICBPYmplY3Qua2V5cyhlbmRQb2ludHMpXG4gICAgICAgIC5zb3J0KClcbiAgICAgICAgLm1hcChwYXRoID0+IHtcbiAgICAgICAgICAgIHNwcmluZ0FjdHVhdG9yUGF5bG9hZC5jb250ZXh0cy5hcHBsaWNhdGlvbi5tYXBwaW5ncy5kaXNwYXRjaGVyU2VydmxldHMuZGlzcGF0Y2hlclNlcnZsZXQucHVzaCh7XG4gICAgICAgICAgICAgICAgZGV0YWlsczoge1xuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0TWFwcGluZ0NvbmRpdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZHM6IGVuZFBvaW50c1twYXRoXS5zb3J0KCksXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuczogW3BhdGgucmVwbGFjZSgvOihbXi9dKykvZywgJ3skMX0nKS5yZXBsYWNlKC9cXFxcL2csICcnKV0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0gYXMgbmV2ZXIpXG4gICAgICAgIH0pXG4gICAgcmV0dXJuIHNwcmluZ0FjdHVhdG9yUGF5bG9hZFxufVxuXG5leHBvcnQgeyBzdGFydFN0dWIsIHN0b3BTdHViLCB0ZXN0LCB0ZXN0V2l0aEFwaUNvdmVyYWdlLCBzZXRFeHBlY3RhdGlvbnMsIHByaW50SmFyVmVyc2lvbiwgc2hvd1Rlc3RSZXN1bHRzIH1cbmV4cG9ydCB7IHN0YXJ0QXBpQ292ZXJhZ2VTZXJ2ZXIgfVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxNQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxLQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFFQSxJQUFBRSxjQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxHQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSSxPQUFBLEdBQUFMLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSyxPQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxRQUFBLEdBQUFQLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBTyxxQkFBQSxHQUFBUixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQVEsS0FBQSxHQUFBVCxzQkFBQSxDQUFBQyxPQUFBO0FBQXVCLFNBQUFELHVCQUFBVSxHQUFBLFdBQUFBLEdBQUEsSUFBQUEsR0FBQSxDQUFBQyxVQUFBLEdBQUFELEdBQUEsZ0JBQUFBLEdBQUE7QUFBQSxTQUFBRSxRQUFBQyxDQUFBLHNDQUFBRCxPQUFBLHdCQUFBRSxNQUFBLHVCQUFBQSxNQUFBLENBQUFDLFFBQUEsYUFBQUYsQ0FBQSxrQkFBQUEsQ0FBQSxnQkFBQUEsQ0FBQSxXQUFBQSxDQUFBLHlCQUFBQyxNQUFB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
|
|
297
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYXhpb3MiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9wYXRoIiwiX2Zhc3RYbWxQYXJzZXIiLCJfZnMiLCJfbG9nZ2VyIiwiX3J1bm5lciIsIl9leHByZXNzTGlzdEVuZHBvaW50cyIsIl9odHRwIiwiX3NodXRkb3duVXRpbHMiLCJvYmoiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsIm8iLCJTeW1ib2wiLCJpdGVyYXRvciIsImNvbnN0cnVjdG9yIiwicHJvdG90eXBlIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsImUiLCJ0IiwiciIsIk9iamVjdCIsIm4iLCJoYXNPd25Qcm9wZXJ0eSIsImRlZmluZVByb3BlcnR5IiwidmFsdWUiLCJpIiwiYSIsImMiLCJhc3luY0l0ZXJhdG9yIiwidSIsInRvU3RyaW5nVGFnIiwiZGVmaW5lIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwid3JhcCIsIkdlbmVyYXRvciIsImNyZWF0ZSIsIkNvbnRleHQiLCJtYWtlSW52b2tlTWV0aG9kIiwidHJ5Q2F0Y2giLCJ0eXBlIiwiYXJnIiwiY2FsbCIsImgiLCJsIiwiZiIsInMiLCJ5IiwiR2VuZXJhdG9yRnVuY3Rpb24iLCJHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSIsInAiLCJkIiwiZ2V0UHJvdG90eXBlT2YiLCJ2IiwidmFsdWVzIiwiZyIsImRlZmluZUl0ZXJhdG9yTWV0aG9kcyIsImZvckVhY2giLCJfaW52b2tlIiwiQXN5bmNJdGVyYXRvciIsImludm9rZSIsInJlc29sdmUiLCJfX2F3YWl0IiwidGhlbiIsImNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnIiwiRXJyb3IiLCJkb25lIiwibWV0aG9kIiwiZGVsZWdhdGUiLCJtYXliZUludm9rZURlbGVnYXRlIiwic2VudCIsIl9zZW50IiwiZGlzcGF0Y2hFeGNlcHRpb24iLCJhYnJ1cHQiLCJUeXBlRXJyb3IiLCJyZXN1bHROYW1lIiwibmV4dCIsIm5leHRMb2MiLCJwdXNoVHJ5RW50cnkiLCJ0cnlMb2MiLCJjYXRjaExvYyIsImZpbmFsbHlMb2MiLCJhZnRlckxvYyIsInRyeUVudHJpZXMiLCJwdXNoIiwicmVzZXRUcnlFbnRyeSIsImNvbXBsZXRpb24iLCJyZXNldCIsImlzTmFOIiwibGVuZ3RoIiwiZGlzcGxheU5hbWUiLCJpc0dlbmVyYXRvckZ1bmN0aW9uIiwibmFtZSIsIm1hcmsiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsImF3cmFwIiwiYXN5bmMiLCJQcm9taXNlIiwia2V5cyIsInJldmVyc2UiLCJwb3AiLCJwcmV2IiwiY2hhckF0Iiwic2xpY2UiLCJzdG9wIiwicnZhbCIsImhhbmRsZSIsImNvbXBsZXRlIiwiZmluaXNoIiwiX2NhdGNoIiwiZGVsZWdhdGVZaWVsZCIsImFzeW5jR2VuZXJhdG9yU3RlcCIsImdlbiIsInJlamVjdCIsIl9uZXh0IiwiX3Rocm93Iiwia2V5IiwiaW5mbyIsImVycm9yIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJmbiIsInNlbGYiLCJhcmdzIiwiYXJndW1lbnRzIiwiYXBwbHkiLCJlcnIiLCJ1bmRlZmluZWQiLCJfZGVmaW5lUHJvcGVydGllcyIsInRhcmdldCIsInByb3BzIiwiZGVzY3JpcHRvciIsIl90b1Byb3BlcnR5S2V5IiwiX2NyZWF0ZUNsYXNzIiwiQ29uc3RydWN0b3IiLCJwcm90b1Byb3BzIiwic3RhdGljUHJvcHMiLCJfY2xhc3NDYWxsQ2hlY2siLCJpbnN0YW5jZSIsIl9kZWZpbmVQcm9wZXJ0eSIsIl90b1ByaW1pdGl2ZSIsIlN0cmluZyIsImlucHV0IiwiaGludCIsInByaW0iLCJ0b1ByaW1pdGl2ZSIsInJlcyIsIk51bWJlciIsIlN0dWIiLCJob3N0IiwicG9ydCIsInVybCIsInByb2Nlc3MiLCJleHBvcnRzIiwic3RhcnRTdHViIiwiY21kIiwiY29uY2F0Iiwiam9pbiIsImxvZ2dlciIsImRlYnVnIiwiamF2YVByb2Nlc3MiLCJjYWxsQ29yZSIsIm1lc3NhZ2UiLCJpbmRleE9mIiwic3R1YkluZm8iLCJzcGxpdCIsIl91cmxJbmZvJGxlbmd0aCIsInRyaW0iLCJ1cmxJbmZvIiwiZXhlYyIsInBhcnNlSW50Iiwic3RvcFN0dWIiLCJfcmVmIiwiX2NhbGxlZSIsInN0dWIiLCJfamF2YVByb2Nlc3Mkc3Rkb3V0IiwiX2phdmFQcm9jZXNzJHN0ZGVyciIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJzdGRvdXQiLCJyZW1vdmVBbGxMaXN0ZW5lcnMiLCJzdGRlcnIiLCJncmFjZWZ1bFNodXRkb3duIiwiX3giLCJ0ZXN0V2l0aEFwaUNvdmVyYWdlIiwiX3JlZjIiLCJfY2FsbGVlMyIsImV4cHJlc3NBcHAiLCJjb250cmFjdFBhdGgiLCJfY2FsbGVlMyQiLCJfY29udGV4dDMiLCJfcmVmMyIsIl9jYWxsZWUyIiwiX3JlamVjdCIsImFwaUNvdmVyYWdlU2VydmVyIiwicmVzdWx0cyIsIl9jYWxsZWUyJCIsIl9jb250ZXh0MiIsInN0YXJ0QXBpQ292ZXJhZ2VTZXJ2ZXIiLCJ0ZXN0IiwiY2xvc2UiLCJfeDciLCJfeDgiLCJfeDIiLCJfeDMiLCJfeDQiLCJfeDUiLCJfeDYiLCJzcGVjc1BhdGgiLCJwYXRoIiwicmVwb3J0RGlyIiwiZnMiLCJybVN5bmMiLCJyZWN1cnNpdmUiLCJmb3JjZSIsInRlc3RDYXNlcyIsInBhcnNlSnVuaXRYTUwiLCJ0b3RhbCIsImZhaWx1cmUiLCJmaWx0ZXIiLCJ0ZXN0Y2FzZSIsInN1Y2Nlc3MiLCJyZXN1bHQiLCJjb25zb2xlIiwibG9nIiwic2hvd1Rlc3RSZXN1bHRzIiwidGVzdEZuIiwibWFwIiwibmFtZVRlbXBBcnIiLCJyZXBsYWNlIiwic2tpcHBlZCIsInNldEV4cGVjdGF0aW9ucyIsInN0dWJQYXRoIiwic3R1YlNlcnZlckJhc2VVcmwiLCJzdHViUmVzcG9uc2UiLCJheGlvcyIsInBvc3QiLCJyZXNwb25zZSIsImRhdGEiLCJwcmludEphclZlcnNpb24iLCJhcHAiLCJodHRwIiwiY3JlYXRlU2VydmVyIiwiX3JlcSIsIndyaXRlSGVhZCIsImVuZFBvaW50cyIsIkpTT04iLCJzdHJpbmdpZnkiLCJleHRyYWN0RW5kUG9pbnRzIiwiZW5kIiwib24iLCJsaXN0ZW4iLCJhZGRyZXNzIiwiZW52IiwicmVwb3J0UGF0aCIsInJlYWRGaWxlU3luYyIsInBhcnNlciIsIlhNTFBhcnNlciIsInJlc3VsdFhtbCIsInBhcnNlIiwidGVzdHN1aXRlIiwiQXJyYXkiLCJpc0FycmF5IiwibGlzdEVuZFBvaW50cyIsImRldGFpbHMiLCJsaXN0RXhwcmVzc0VuZHBvaW50cyIsImFwaURldGFpbCIsIm1ldGhvZHMiLCJzcHJpbmdBY3R1YXRvclBheWxvYWQiLCJjb250ZXh0cyIsImFwcGxpY2F0aW9uIiwibWFwcGluZ3MiLCJkaXNwYXRjaGVyU2VydmxldHMiLCJkaXNwYXRjaGVyU2VydmxldCIsInNvcnQiLCJyZXF1ZXN0TWFwcGluZ0NvbmRpdGlvbnMiLCJwYXR0ZXJucyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBheGlvcyBmcm9tICdheGlvcydcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXG5pbXBvcnQgeyBDaGlsZFByb2Nlc3MgfSBmcm9tICdjaGlsZF9wcm9jZXNzJ1xuaW1wb3J0IHsgWE1MUGFyc2VyIH0gZnJvbSAnZmFzdC14bWwtcGFyc2VyJ1xuaW1wb3J0IGZzIGZyb20gJ2ZzJ1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuLi9jb21tb24vbG9nZ2VyJ1xuaW1wb3J0IHsgY2FsbENvcmUgfSBmcm9tICcuLi9jb21tb24vcnVubmVyJ1xuaW1wb3J0IGxpc3RFeHByZXNzRW5kcG9pbnRzIGZyb20gJ2V4cHJlc3MtbGlzdC1lbmRwb2ludHMnXG5pbXBvcnQgaHR0cCBmcm9tICdodHRwJ1xuaW1wb3J0IHsgQWRkcmVzc0luZm8gfSBmcm9tICduZXQnXG5pbXBvcnQgeyBncmFjZWZ1bFNodXRkb3duIH0gZnJvbSAnLi9zaHV0ZG93blV0aWxzJ1xuXG5leHBvcnQgY2xhc3MgU3R1YiB7XG4gICAgaG9zdDogc3RyaW5nXG4gICAgcG9ydDogbnVtYmVyXG4gICAgdXJsOiBzdHJpbmdcbiAgICBwcm9jZXNzOiBDaGlsZFByb2Nlc3NcbiAgICBjb25zdHJ1Y3Rvcihob3N0OiBzdHJpbmcsIHBvcnQ6IG51bWJlciwgdXJsOiBzdHJpbmcsIHByb2Nlc3M6IENoaWxkUHJvY2Vzcykge1xuICAgICAgICB0aGlzLmhvc3QgPSBob3N0XG4gICAgICAgIHRoaXMucG9ydCA9IHBvcnRcbiAgICAgICAgdGhpcy51cmwgPSB1cmxcbiAgICAgICAgdGhpcy5wcm9jZXNzID0gcHJvY2Vzc1xuICAgIH1cbn1cblxuY29uc3Qgc3RhcnRTdHViID0gKGhvc3Q/OiBzdHJpbmcsIHBvcnQ/OiBudW1iZXIsIGFyZ3M/OiAoc3RyaW5nIHwgbnVtYmVyKVtdKTogUHJvbWlzZTxTdHViPiA9PiB7XG4gICAgdmFyIGNtZCA9IGBzdHViYFxuICAgIGlmIChob3N0KSBjbWQgKz0gYCAtLWhvc3Q9JHtob3N0fWBcbiAgICBpZiAocG9ydCkgY21kICs9IGAgLS1wb3J0PSR7cG9ydH1gXG4gICAgaWYgKGFyZ3MpIGNtZCArPSAnICcgKyBhcmdzLmpvaW4oJyAnKVxuXG4gICAgbG9nZ2VyLmluZm8oJ1N0dWI6IFN0YXJ0aW5nIHNlcnZlcicpXG4gICAgbG9nZ2VyLmRlYnVnKGBTdHViOiBFeGVjdXRpbmcgXCIke2NtZH1cImApXG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBqYXZhUHJvY2VzcyA9IGNhbGxDb3JlKFxuICAgICAgICAgICAgY21kLFxuICAgICAgICAgICAgKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoYFN0dWI6IEV4aXRlZCB3aXRoIGVycm9yICR7ZXJyfWApXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIChtZXNzYWdlLCBlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuaW5kZXhPZignU3R1YiBzZXJ2ZXIgaXMgcnVubmluZycpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBTdHViOiAke21lc3NhZ2V9YClcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0dWJJbmZvID0gbWVzc2FnZS5zcGxpdCgnb24nKVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0dWJJbmZvLmxlbmd0aCA8IDIpIHJlamVjdCgnQ2Fubm90IGRldGVybWluZSB1cmwgZnJvbSBzdHViIG91dHB1dCcpXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cmwgPSBzdHViSW5mb1sxXS50cmltKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cmxJbmZvID0gLyguKj8pOlxcL1xcLyguKj8pOihbMC05XSspLy5leGVjKHVybClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHVybEluZm8/Lmxlbmd0aCA/PyAwKSA8IDQpIHJlamVjdCgnQ2Fubm90IGRldGVybWluZSBob3N0IGFuZCBwb3J0IGZyb20gc3R1YiBvdXRwdXQnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgcmVzb2x2ZShuZXcgU3R1Yih1cmxJbmZvIVsyXSwgcGFyc2VJbnQodXJsSW5mbyFbM10pLCB1cmxJbmZvIVswXSwgamF2YVByb2Nlc3MpKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1lc3NhZ2UuaW5kZXhPZignQWRkcmVzcyBhbHJlYWR5IGluIHVzZScpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihgU3R1YjogJHttZXNzYWdlfWApXG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoJ0FkZHJlc3MgYWxyZWFkeSBpbiB1c2UnKVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKGBTdHViOiAke21lc3NhZ2V9YClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihgU3R1YjogJHttZXNzYWdlfWApXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICApXG4gICAgfSlcbn1cblxuY29uc3Qgc3RvcFN0dWIgPSBhc3luYyAoc3R1YjogU3R1YikgPT4ge1xuICAgIGxvZ2dlci5kZWJ1ZyhgU3R1YjogU3RvcHBpbmcgc2VydmVyIGF0ICR7c3R1Yi51cmx9YClcbiAgICBjb25zdCBqYXZhUHJvY2VzcyA9IHN0dWIucHJvY2Vzc1xuICAgIGphdmFQcm9jZXNzLnN0ZG91dD8ucmVtb3ZlQWxsTGlzdGVuZXJzKClcbiAgICBqYXZhUHJvY2Vzcy5zdGRlcnI/LnJlbW92ZUFsbExpc3RlbmVycygpXG4gICAgamF2YVByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzKCdjbG9zZScpXG4gICAgbG9nZ2VyLmRlYnVnKCdUcnlpbmcgdG8gc3RvcCBzdHViIHByb2Nlc3MgZ3JhY2VmdWxseSAuLi4nKVxuICAgIGF3YWl0IGdyYWNlZnVsU2h1dGRvd24oamF2YVByb2Nlc3MpXG4gICAgbG9nZ2VyLmRlYnVnKCdDb21wbGV0ZWQgZ3JhY2VmdWwgdGVybWluYXRpb24gb2YgdGhlIHN0dWIgcHJvY2VzcycpXG4gICAgbG9nZ2VyLmluZm8oYFN0dWI6IFN0b3BwZWQgc2VydmVyIGF0ICR7c3R1Yi51cmx9YClcbn1cblxuY29uc3QgdGVzdFdpdGhBcGlDb3ZlcmFnZSA9IGFzeW5jIChcbiAgICBleHByZXNzQXBwOiBhbnksXG4gICAgaG9zdD86IHN0cmluZyxcbiAgICBwb3J0PzogbnVtYmVyLFxuICAgIGNvbnRyYWN0UGF0aD86IHN0cmluZyxcbiAgICBhcmdzPzogKHN0cmluZyB8IG51bWJlcilbXVxuKTogUHJvbWlzZTx7IFtrOiBzdHJpbmddOiBudW1iZXIgfSB8IHVuZGVmaW5lZD4gPT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgX3JlamVjdCkgPT4ge1xuICAgICAgICBsZXQgYXBpQ292ZXJhZ2VTZXJ2ZXIgPSBhd2FpdCBzdGFydEFwaUNvdmVyYWdlU2VydmVyKGV4cHJlc3NBcHApXG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCB0ZXN0KGhvc3QsIHBvcnQsIGNvbnRyYWN0UGF0aCwgYXJncylcbiAgICAgICAgYXBpQ292ZXJhZ2VTZXJ2ZXIuY2xvc2UoKCkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHRzKVxuICAgICAgICB9KVxuICAgIH0pXG59XG5cbmNvbnN0IHRlc3QgPSAoaG9zdD86IHN0cmluZywgcG9ydD86IG51bWJlciwgY29udHJhY3RQYXRoPzogc3RyaW5nLCBhcmdzPzogKHN0cmluZyB8IG51bWJlcilbXSk6IFByb21pc2U8eyBbazogc3RyaW5nXTogbnVtYmVyIH0gfCB1bmRlZmluZWQ+ID0+IHtcbiAgICBjb25zdCBzcGVjc1BhdGggPSBwYXRoLnJlc29sdmUoY29udHJhY3RQYXRoICsgJycpXG5cbiAgICB2YXIgY21kID0gYHRlc3RgXG4gICAgaWYgKGNvbnRyYWN0UGF0aCkgY21kICs9IGAgJHtzcGVjc1BhdGh9YFxuICAgIGNtZCArPSAnIC0tanVuaXRSZXBvcnREaXI9ZGlzdC90ZXN0LXJlcG9ydCdcbiAgICBpZiAoaG9zdCkgY21kICs9IGAgLS1ob3N0PSR7aG9zdH1gXG4gICAgaWYgKHBvcnQpIGNtZCArPSBgIC0tcG9ydD0ke3BvcnR9YFxuICAgIGlmIChhcmdzKSBjbWQgKz0gJyAnICsgYXJncy5qb2luKCcgJylcblxuICAgIGxvZ2dlci5pbmZvKCdUZXN0OiBSdW5uaW5nJylcbiAgICBsb2dnZXIuZGVidWcoYFRlc3Q6IEV4ZWN1dGluZyBcIiR7Y21kfVwiYClcblxuICAgIGNvbnN0IHJlcG9ydERpciA9IHBhdGgucmVzb2x2ZSgnZGlzdC90ZXN0LXJlcG9ydCcpXG4gICAgZnMucm1TeW5jKHJlcG9ydERpciwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pXG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIF9yZWplY3QpID0+IHtcbiAgICAgICAgY2FsbENvcmUoXG4gICAgICAgICAgICBjbWQsXG4gICAgICAgICAgICAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSBsb2dnZXIuZXJyb3IoYFRlc3Q6IEZhaWxlZCB3aXRoIGVycm9yICR7ZXJyfWApXG4gICAgICAgICAgICAgICAgdmFyIHRlc3RDYXNlcyA9IHBhcnNlSnVuaXRYTUwoKVxuICAgICAgICAgICAgICAgIGNvbnN0IHRvdGFsID0gdGVzdENhc2VzLmxlbmd0aFxuICAgICAgICAgICAgICAgIGNvbnN0IGZhaWx1cmUgPSB0ZXN0Q2FzZXMuZmlsdGVyKCh0ZXN0Y2FzZTogeyBbaWQ6IHN0cmluZ106IGFueSB9KSA9PiB0ZXN0Y2FzZVsnZmFpbHVyZSddIHx8IHRlc3RjYXNlWydza2lwcGVkJ10pLmxlbmd0aFxuICAgICAgICAgICAgICAgIGNvbnN0IHN1Y2Nlc3MgPSB0b3RhbCAtIGZhaWx1cmVcbiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0geyB0b3RhbCwgc3VjY2VzcywgZmFpbHVyZSB9XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgKG1lc3NhZ2UsIGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuaW5kZXhPZignQVBJIENPVkVSQUdFIFNVTU1BUlknKSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKG1lc3NhZ2UpIC8vTG9nIGFsd2F5cyBmb3IgYWxsIGxvZyBsZXZlbHNcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsb2dnZXJbZXJyb3IgPyAnZXJyb3InIDogJ2RlYnVnJ10oYFRlc3Q6ICR7bWVzc2FnZX1gKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgIH0pXG59XG5cbmNvbnN0IHNob3dUZXN0UmVzdWx0cyA9ICh0ZXN0Rm46IChuYW1lOiBzdHJpbmcsIGNiOiAoKSA9PiB2b2lkKSA9PiB2b2lkKSA9PiB7XG4gICAgdmFyIHRlc3RDYXNlcyA9IHBhcnNlSnVuaXRYTUwoKVxuICAgIHRlc3RDYXNlcy5tYXAoZnVuY3Rpb24gKHRlc3RjYXNlOiB7IFtpZDogc3RyaW5nXTogYW55IH0pIHtcbiAgICAgICAgdmFyIG5hbWUgPSAnTm8gTmFtZSdcbiAgICAgICAgaWYgKHRlc3RjYXNlWydzeXN0ZW0tb3V0J10pIHtcbiAgICAgICAgICAgIGNvbnN0IG5hbWVUZW1wQXJyID0gdGVzdGNhc2VbJ3N5c3RlbS1vdXQnXVxuICAgICAgICAgICAgICAgIC50cmltKClcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxuL2csICcnKVxuICAgICAgICAgICAgICAgIC5zcGxpdCgvZGlzcGxheS1uYW1lOi4qU2NlbmFyaW86IC8pXG4gICAgICAgICAgICBpZiAobmFtZVRlbXBBcnIubGVuZ3RoID4gMSkgbmFtZSA9IG5hbWVUZW1wQXJyWzFdLnRyaW0oKVxuICAgICAgICB9XG4gICAgICAgIHRlc3RGbihuYW1lLCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGVzdGNhc2UuZmFpbHVyZSB8fCB0ZXN0Y2FzZS5za2lwcGVkKSB0aHJvdyBuZXcgRXJyb3IoJ0RpZCBub3QgcGFzcycpXG4gICAgICAgIH0pXG4gICAgfSlcbn1cblxuY29uc3Qgc2V0RXhwZWN0YXRpb25zID0gKHN0dWJQYXRoOiBzdHJpbmcsIHN0dWJTZXJ2ZXJCYXNlVXJsPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgY29uc3Qgc3R1YlJlc3BvbnNlID0gcmVxdWlyZShwYXRoLnJlc29sdmUoc3R1YlBhdGgpKVxuICAgIHN0dWJTZXJ2ZXJCYXNlVXJsID0gc3R1YlNlcnZlckJhc2VVcmwgfHwgJ2h0dHA6Ly9sb2NhbGhvc3Q6OTAwMCdcblxuICAgIGxvZ2dlci5pbmZvKGBTZXQgRXhwZWN0YXRpb25zOiBTdHViIHVybCBpcyAke3N0dWJTZXJ2ZXJCYXNlVXJsfWApXG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBheGlvc1xuICAgICAgICAgICAgLnBvc3QoYCR7c3R1YlNlcnZlckJhc2VVcmx9L19zcGVjbWF0aWMvZXhwZWN0YXRpb25zYCwgc3R1YlJlc3BvbnNlKVxuICAgICAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhgU2V0IEV4cGVjdGF0aW9uczogJHtyZXNwb25zZS5kYXRhfWApXG4gICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ1NldCBFeHBlY3RhdGlvbnM6IEZpbmlzaGVkJylcbiAgICAgICAgICAgICAgICByZXNvbHZlKClcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoYFNldCBFeHBlY3RhdGlvbnM6IEZhaWxlZCB3aXRoIGVycm9yICR7ZXJyfWApXG4gICAgICAgICAgICAgICAgcmVqZWN0KGBTZXR0aW5nIGV4cGVjYXRpb24gZmFpbGVkIHdpdGggZXJyb3IgJHtlcnJ9YClcbiAgICAgICAgICAgIH0pXG4gICAgfSlcbn1cblxuY29uc3QgcHJpbnRKYXJWZXJzaW9uID0gKCkgPT4ge1xuICAgIGNvbnN0IGNtZCA9IGAtLXZlcnNpb25gXG4gICAgbG9nZ2VyLmluZm8oJ1ByaW50IEphciBWZXJzaW9uOiBSdW5uaW5nJylcbiAgICBsb2dnZXIuZGVidWcoYFByaW50IEphciBWZXJzaW9uOiBFeGVjdXRpbmcgXCIke2NtZH1cImApXG5cbiAgICBjYWxsQ29yZShcbiAgICAgICAgY21kLFxuICAgICAgICAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChlcnIpIGxvZ2dlci5lcnJvcihgUHJpbnQgSmFyIFZlcnNpb246IEZhaWxlZCB3aXRoIGVycm9yICR7ZXJyfWApXG4gICAgICAgIH0sXG4gICAgICAgIChtZXNzYWdlLCBlcnJvcikgPT4ge1xuICAgICAgICAgICAgaWYgKGVycm9yKSBsb2dnZXIuZXJyb3IoYFByaW50IEphciBWZXJzaW9uOiAke21lc3NhZ2V9YClcbiAgICAgICAgICAgIGVsc2UgY29uc29sZS5sb2coYCR7bWVzc2FnZX1gKVxuICAgICAgICB9XG4gICAgKVxufVxuXG5jb25zdCBzdGFydEFwaUNvdmVyYWdlU2VydmVyID0gKGV4cHJlc3NBcHA6IGFueSk6IFByb21pc2U8aHR0cC5TZXJ2ZXI+ID0+IHtcbiAgICBsb2dnZXIuZGVidWcoYFJlZ2lzdGVyaW5nIEFQSSBlbmRwb2ludCBmb3IgY292ZXJhZ2VgKVxuICAgIGxldCBhcHAgPSBodHRwLmNyZWF0ZVNlcnZlcigoX3JlcSwgcmVzKSA9PiB7XG4gICAgICAgIHJlcy53cml0ZUhlYWQoMjAwLCB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSlcbiAgICAgICAgY29uc3QgZW5kUG9pbnRzID0gSlNPTi5zdHJpbmdpZnkoZXh0cmFjdEVuZFBvaW50cyhleHByZXNzQXBwKSlcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBFbmRwb2ludHM6ICR7ZW5kUG9pbnRzfWApXG4gICAgICAgIHJlcy5lbmQoZW5kUG9pbnRzKVxuICAgIH0pXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPGh0dHAuU2VydmVyPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGFwcC5vbignZXJyb3InLCBlcnIgPT4ge1xuICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdFcnJvciB3aGlsZSBzdGFydGluZyBlbmQgcG9pbnRzIHNlcnZlciBmb3IgYXBpIGNvdmVyYWdlJywgZXJyKVxuICAgICAgICAgICAgcmVqZWN0KCdFcnJvciB3aGlsZSBzdGFydGluZyBlbmQgcG9pbnRzIHNlcnZlciBmb3IgYXBpIGNvdmVyYWdlJylcbiAgICAgICAgfSlcbiAgICAgICAgYXBwLmxpc3Rlbih7IGhvc3Q6ICcxMjcuMC4wLjEnLCBwb3J0OiAwIH0sICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFkZHJlc3MgPSBhcHAuYWRkcmVzcygpIGFzIEFkZHJlc3NJbmZvIHwgbnVsbFxuICAgICAgICAgICAgcHJvY2Vzcy5lbnZbJ2VuZHBvaW50c0FQSSddID0gYGh0dHA6Ly8ke2FkZHJlc3M/LmFkZHJlc3N9OiR7YWRkcmVzcz8ucG9ydH1gXG4gICAgICAgICAgICBsb2dnZXIuaW5mbyhgRW5kcG9pbnRzIEFQSSByZWdpc3RlcmVkIGF0ICR7cHJvY2Vzcy5lbnZbJ2VuZHBvaW50c0FQSSddfWApXG4gICAgICAgICAgICByZXNvbHZlKGFwcClcbiAgICAgICAgfSlcbiAgICB9KVxufVxuXG5jb25zdCBwYXJzZUp1bml0WE1MID0gKCkgPT4ge1xuICAgIGNvbnN0IHJlcG9ydFBhdGggPSBwYXRoLnJlc29sdmUoJ2Rpc3QvdGVzdC1yZXBvcnQvVEVTVC1qdW5pdC1qdXBpdGVyLnhtbCcpXG4gICAgdmFyIGRhdGEgPSBmcy5yZWFkRmlsZVN5bmMocmVwb3J0UGF0aClcbiAgICBjb25zdCBwYXJzZXIgPSBuZXcgWE1MUGFyc2VyKClcbiAgICB2YXIgcmVzdWx0WG1sID0gcGFyc2VyLnBhcnNlKGRhdGEpXG4gICAgcmVzdWx0WG1sLnRlc3RzdWl0ZS50ZXN0Y2FzZSA9IEFycmF5LmlzQXJyYXkocmVzdWx0WG1sLnRlc3RzdWl0ZS50ZXN0Y2FzZSkgPyByZXN1bHRYbWwudGVzdHN1aXRlLnRlc3RjYXNlIDogW3Jlc3VsdFhtbC50ZXN0c3VpdGUudGVzdGNhc2VdXG4gICAgcmV0dXJuIHJlc3VsdFhtbC50ZXN0c3VpdGUudGVzdGNhc2Vcbn1cblxuY29uc3QgbGlzdEVuZFBvaW50cyA9IChleHByZXNzQXBwOiBhbnkpOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZ1tdIH0gPT4ge1xuICAgIGNvbnN0IGRldGFpbHMgPSBsaXN0RXhwcmVzc0VuZHBvaW50cyhleHByZXNzQXBwKVxuICAgIGxldCBlbmRQb2ludHM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nW10gfSA9IHt9XG4gICAgZGV0YWlscy5tYXAoYXBpRGV0YWlsID0+IHtcbiAgICAgICAgZW5kUG9pbnRzW2FwaURldGFpbC5wYXRoXSA9IGFwaURldGFpbC5tZXRob2RzXG4gICAgfSlcbiAgICBkZWxldGUgZW5kUG9pbnRzWycqJ11cbiAgICByZXR1cm4gZW5kUG9pbnRzXG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RFbmRQb2ludHMoZXhwcmVzc0FwcDogYW55KSB7XG4gICAgbGV0IGVuZFBvaW50cyA9IGxpc3RFbmRQb2ludHMoZXhwcmVzc0FwcClcbiAgICBsZXQgc3ByaW5nQWN0dWF0b3JQYXlsb2FkID0ge1xuICAgICAgICBjb250ZXh0czoge1xuICAgICAgICAgICAgYXBwbGljYXRpb246IHtcbiAgICAgICAgICAgICAgICBtYXBwaW5nczoge1xuICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaGVyU2VydmxldHM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoZXJTZXJ2bGV0OiBbXSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9XG4gICAgT2JqZWN0LmtleXMoZW5kUG9pbnRzKVxuICAgICAgICAuc29ydCgpXG4gICAgICAgIC5tYXAocGF0aCA9PiB7XG4gICAgICAgICAgICBzcHJpbmdBY3R1YXRvclBheWxvYWQuY29udGV4dHMuYXBwbGljYXRpb24ubWFwcGluZ3MuZGlzcGF0Y2hlclNlcnZsZXRzLmRpc3BhdGNoZXJTZXJ2bGV0LnB1c2goe1xuICAgICAgICAgICAgICAgIGRldGFpbHM6IHtcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdE1hcHBpbmdDb25kaXRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRob2RzOiBlbmRQb2ludHNbcGF0aF0uc29ydCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybnM6IFtwYXRoLnJlcGxhY2UoLzooW14vXSspL2csICd7JDF9JykucmVwbGFjZSgvXFxcXC9nLCAnJyldLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9IGFzIG5ldmVyKVxuICAgICAgICB9KVxuICAgIHJldHVybiBzcHJpbmdBY3R1YXRvclBheWxvYWRcbn1cblxuZXhwb3J0IHsgc3RhcnRTdHViLCBzdG9wU3R1YiwgdGVzdCwgdGVzdFdpdGhBcGlDb3ZlcmFnZSwgc2V0RXhwZWN0YXRpb25zLCBwcmludEphclZlcnNpb24sIHNob3dUZXN0UmVzdWx0cyB9XG5leHBvcnQgeyBzdGFydEFwaUNvdmVyYWdlU2VydmVyIH1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsS0FBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBQUUsY0FBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsR0FBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUksT0FBQSxHQUFBTCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUssT0FBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0scUJBQUEsR0FBQVAsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFPLEtBQUEsR0FBQVIsc0JBQUEsQ0FBQUMsT0FBQTtBQUVBLElBQUFRLGNBQUEsR0FBQVIsT0FBQTtBQUFrRCxTQUFBRCx1QkFBQVUsR0FBQSxXQUFBQSxHQUFBLElBQUFBLEdBQUEsQ0FBQUMsVUFBQSxHQUFBRCxH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
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.gracefulShutdown = void 0;
|
|
8
|
+
var _nodeProcess = _interopRequireDefault(require("node:process"));
|
|
9
|
+
var _promise = _interopRequireDefault(require("terminate/promise"));
|
|
10
|
+
var _logger = _interopRequireDefault(require("../common/logger"));
|
|
11
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
12
|
+
function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator["return"] && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, "catch": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
|
|
13
|
+
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
14
|
+
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
15
|
+
function isProcessRunning(pid) {
|
|
16
|
+
try {
|
|
17
|
+
// Sending signal 0 doesn't kill the process, but will throw an error if the process doesn't exist
|
|
18
|
+
_nodeProcess["default"].kill(pid, 0);
|
|
19
|
+
_logger["default"].debug('Stub process is still running and needs to be terminated');
|
|
20
|
+
return true;
|
|
21
|
+
} catch (err) {
|
|
22
|
+
_logger["default"].debug('Stub process has shut down due to the SIGTERM signal');
|
|
23
|
+
// If process doesn't exist, ESRCH will be the error code
|
|
24
|
+
return err.code !== 'ESRCH';
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
var gracefulShutdown = /*#__PURE__*/function () {
|
|
28
|
+
var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(javaProcess) {
|
|
29
|
+
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
|
|
30
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
31
|
+
case 0:
|
|
32
|
+
_logger["default"].info('Sending SIGTERM to stop stub process');
|
|
33
|
+
javaProcess.kill('SIGTERM');
|
|
34
|
+
return _context2.abrupt("return", new Promise(function (resolve) {
|
|
35
|
+
setTimeout( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
|
|
36
|
+
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
37
|
+
while (1) switch (_context.prev = _context.next) {
|
|
38
|
+
case 0:
|
|
39
|
+
if (!isProcessRunning(javaProcess.pid)) {
|
|
40
|
+
_context.next = 4;
|
|
41
|
+
break;
|
|
42
|
+
}
|
|
43
|
+
_logger["default"].debug('Terminating stub process...');
|
|
44
|
+
_context.next = 4;
|
|
45
|
+
return (0, _promise["default"])(javaProcess.pid);
|
|
46
|
+
case 4:
|
|
47
|
+
resolve();
|
|
48
|
+
case 5:
|
|
49
|
+
case "end":
|
|
50
|
+
return _context.stop();
|
|
51
|
+
}
|
|
52
|
+
}, _callee);
|
|
53
|
+
})), 1000);
|
|
54
|
+
}));
|
|
55
|
+
case 3:
|
|
56
|
+
case "end":
|
|
57
|
+
return _context2.stop();
|
|
58
|
+
}
|
|
59
|
+
}, _callee2);
|
|
60
|
+
}));
|
|
61
|
+
return function gracefulShutdown(_x) {
|
|
62
|
+
return _ref.apply(this, arguments);
|
|
63
|
+
};
|
|
64
|
+
}();
|
|
65
|
+
exports.gracefulShutdown = gracefulShutdown;
|
|
66
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbm9kZVByb2Nlc3MiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9wcm9taXNlIiwiX2xvZ2dlciIsIm9iaiIsIl9fZXNNb2R1bGUiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwiZSIsInQiLCJyIiwiT2JqZWN0IiwicHJvdG90eXBlIiwibiIsImhhc093blByb3BlcnR5IiwibyIsImRlZmluZVByb3BlcnR5IiwidmFsdWUiLCJpIiwiU3ltYm9sIiwiYSIsIml0ZXJhdG9yIiwiYyIsImFzeW5jSXRlcmF0b3IiLCJ1IiwidG9TdHJpbmdUYWciLCJkZWZpbmUiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJ3cmFwIiwiR2VuZXJhdG9yIiwiY3JlYXRlIiwiQ29udGV4dCIsIm1ha2VJbnZva2VNZXRob2QiLCJ0cnlDYXRjaCIsInR5cGUiLCJhcmciLCJjYWxsIiwiaCIsImwiLCJmIiwicyIsInkiLCJHZW5lcmF0b3JGdW5jdGlvbiIsIkdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlIiwicCIsImQiLCJnZXRQcm90b3R5cGVPZiIsInYiLCJ2YWx1ZXMiLCJnIiwiZGVmaW5lSXRlcmF0b3JNZXRob2RzIiwiZm9yRWFjaCIsIl9pbnZva2UiLCJBc3luY0l0ZXJhdG9yIiwiaW52b2tlIiwiX3R5cGVvZiIsInJlc29sdmUiLCJfX2F3YWl0IiwidGhlbiIsImNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnIiwiRXJyb3IiLCJkb25lIiwibWV0aG9kIiwiZGVsZWdhdGUiLCJtYXliZUludm9rZURlbGVnYXRlIiwic2VudCIsIl9zZW50IiwiZGlzcGF0Y2hFeGNlcHRpb24iLCJhYnJ1cHQiLCJUeXBlRXJyb3IiLCJyZXN1bHROYW1lIiwibmV4dCIsIm5leHRMb2MiLCJwdXNoVHJ5RW50cnkiLCJ0cnlMb2MiLCJjYXRjaExvYyIsImZpbmFsbHlMb2MiLCJhZnRlckxvYyIsInRyeUVudHJpZXMiLCJwdXNoIiwicmVzZXRUcnlFbnRyeSIsImNvbXBsZXRpb24iLCJyZXNldCIsImlzTmFOIiwibGVuZ3RoIiwiZGlzcGxheU5hbWUiLCJpc0dlbmVyYXRvckZ1bmN0aW9uIiwiY29uc3RydWN0b3IiLCJuYW1lIiwibWFyayIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwiYXdyYXAiLCJhc3luYyIsIlByb21pc2UiLCJrZXlzIiwicmV2ZXJzZSIsInBvcCIsInByZXYiLCJjaGFyQXQiLCJzbGljZSIsInN0b3AiLCJydmFsIiwiaGFuZGxlIiwiY29tcGxldGUiLCJmaW5pc2giLCJfY2F0Y2giLCJkZWxlZ2F0ZVlpZWxkIiwiYXN5bmNHZW5lcmF0b3JTdGVwIiwiZ2VuIiwicmVqZWN0IiwiX25leHQiLCJfdGhyb3ciLCJrZXkiLCJpbmZvIiwiZXJyb3IiLCJfYXN5bmNUb0dlbmVyYXRvciIsImZuIiwic2VsZiIsImFyZ3MiLCJhcmd1bWVudHMiLCJhcHBseSIsImVyciIsInVuZGVmaW5lZCIsImlzUHJvY2Vzc1J1bm5pbmciLCJwaWQiLCJub2RlUHJvY2VzcyIsImtpbGwiLCJsb2dnZXIiLCJkZWJ1ZyIsImNvZGUiLCJncmFjZWZ1bFNodXRkb3duIiwiX3JlZiIsIl9jYWxsZWUyIiwiamF2YVByb2Nlc3MiLCJfY2FsbGVlMiQiLCJfY29udGV4dDIiLCJzZXRUaW1lb3V0IiwiX2NhbGxlZSIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJ0ZXJtaW5hdGUiLCJfeCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvY29yZS9zaHV0ZG93blV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoaWxkUHJvY2VzcyB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IG5vZGVQcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQgdGVybWluYXRlIGZyb20gJ3Rlcm1pbmF0ZS9wcm9taXNlJztcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi4vY29tbW9uL2xvZ2dlcidcblxuZnVuY3Rpb24gaXNQcm9jZXNzUnVubmluZyhwaWQ6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICAgIC8vIFNlbmRpbmcgc2lnbmFsIDAgZG9lc24ndCBraWxsIHRoZSBwcm9jZXNzLCBidXQgd2lsbCB0aHJvdyBhbiBlcnJvciBpZiB0aGUgcHJvY2VzcyBkb2Vzbid0IGV4aXN0XG4gICAgICAgIG5vZGVQcm9jZXNzLmtpbGwocGlkLCAwKTtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdTdHViIHByb2Nlc3MgaXMgc3RpbGwgcnVubmluZyBhbmQgbmVlZHMgdG8gYmUgdGVybWluYXRlZCcpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnU3R1YiBwcm9jZXNzIGhhcyBzaHV0IGRvd24gZHVlIHRvIHRoZSBTSUdURVJNIHNpZ25hbCcpXG4gICAgICAgIC8vIElmIHByb2Nlc3MgZG9lc24ndCBleGlzdCwgRVNSQ0ggd2lsbCBiZSB0aGUgZXJyb3IgY29kZVxuICAgICAgICByZXR1cm4gZXJyLmNvZGUgIT09ICdFU1JDSCc7XG4gICAgfVxufVxuXG5leHBvcnQgY29uc3QgZ3JhY2VmdWxTaHV0ZG93biA9IGFzeW5jIGZ1bmN0aW9uIChqYXZhUHJvY2VzczogQ2hpbGRQcm9jZXNzKTogUHJvbWlzZTx2b2lkPiB7XG5cbiAgICBsb2dnZXIuaW5mbygnU2VuZGluZyBTSUdURVJNIHRvIHN0b3Agc3R1YiBwcm9jZXNzJylcbiAgICBqYXZhUHJvY2Vzcy5raWxsKCdTSUdURVJNJylcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGlmIChpc1Byb2Nlc3NSdW5uaW5nKGphdmFQcm9jZXNzLnBpZCEpKSB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCdUZXJtaW5hdGluZyBzdHViIHByb2Nlc3MuLi4nKVxuICAgICAgICAgICAgICAgIGF3YWl0IHRlcm1pbmF0ZShqYXZhUHJvY2Vzcy5waWQhKSAvLyBBc3N1bWluZyB0ZXJtaW5hdGUgaXMgYSBrbm93biBmdW5jdGlvblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzb2x2ZSgpXG4gICAgICAgIH0sIDEwMDApXG4gICAgfSlcbn1cblxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQ0EsSUFBQUEsWUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsUUFBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsT0FBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQXFDLFNBQUFELHVCQUFBSSxHQUFBLFdBQUFBLEdBQUEsSUFBQUEsR0FBQSxDQUFBQyxVQUFBLEdBQUFELEdBQUEsZ0JBQUFBLEdBQUE7QUFBQSxTQUFBRSxvQkFBQSxrQkFGckMscUpBQUFBLG1CQUFBLFlBQUFBLG9CQUFBLFdBQUFDLENBQUEsU0FBQUMsQ0FBQSxFQUFBRCxDQUFBLE9BQUFFLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxTQUFBLEVBQUFDLENBQUEsR0FBQUgsQ0FBQSxDQUFBSSxjQUFBLEVBQUFDLENBQUEsR0FBQUosTUFBQSxDQUFBSyxjQUFBLGNBQUFQLENBQUEsRUFBQUQsQ0FBQSxFQUFBRSxDQUFBLElBQUFELENBQUEsQ0FBQUQsQ0FBQSxJQUFBRSxDQUFBLENBQUFPLEtBQUEsS0FBQUMsQ0FBQSx3QkFBQUMsTUFBQSxHQUFBQSxNQUFBLE9BQUFDLENBQUEsR0FBQUYsQ0FBQSxDQUFBRyxRQUFBLGtCQUFBQyxDQUFBLEdBQUFKLENBQUEsQ0FBQUssYUFBQSx1QkFBQUMsQ0FBQSxHQUFBTixDQUFBLENBQUFPLFdBQUEsOEJBQUFDLE9BQUFqQixDQUFBLEVBQUFELENBQUEsRUFBQUUsQ0FBQSxXQUFBQyxNQUFBLENBQUFLLGNBQUEsQ0FBQVAsQ0FBQSxFQUFBRCxDQUFBLElBQUFTLEtBQUEsRUFBQVAsQ0FBQSxFQUFBaUIsVUFBQSxNQUFBQyxZQUFBLE1BQUFDLFFB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
|
package/package.json
CHANGED
|
@@ -7,9 +7,12 @@ import terminate from 'terminate/promise';
|
|
|
7
7
|
import * as specmatic from '../..';
|
|
8
8
|
import { specmaticCoreJarName } from '../../config';
|
|
9
9
|
import { Stub } from '..';
|
|
10
|
+
import * as shutDown from '../shutdownUtils'
|
|
11
|
+
|
|
10
12
|
|
|
11
13
|
jest.mock('child_process');
|
|
12
14
|
jest.mock('terminate');
|
|
15
|
+
jest.mock('../shutdownUtils')
|
|
13
16
|
|
|
14
17
|
const SPECMATIC_JAR_PATH = path.resolve(__dirname, '..', '..', '..', specmaticCoreJarName);
|
|
15
18
|
const HOST = 'localhost';
|
|
@@ -123,10 +126,11 @@ test('additional pass through arguments can be string or number', async () => {
|
|
|
123
126
|
expect(spawn.mock.calls[0][1][2]).toBe(`stub --host=${HOST} --port=${PORT} p1 123`);
|
|
124
127
|
});
|
|
125
128
|
|
|
126
|
-
test('stopStub method stops any running stub server', () => {
|
|
129
|
+
test('stopStub method stops any running stub server', async () => {
|
|
130
|
+
shutDown.gracefulShutdown.mockResolvedValue(true);
|
|
127
131
|
specmatic.stopStub(stub);
|
|
128
132
|
|
|
129
133
|
expect(readableMock.removeAllListeners).toHaveBeenCalledTimes(2);
|
|
130
134
|
expect(javaProcessMock.removeAllListeners).toHaveBeenCalledTimes(1);
|
|
131
|
-
expect(
|
|
135
|
+
expect(shutDown.gracefulShutdown).toHaveBeenCalledTimes(1);
|
|
132
136
|
});
|
package/src/core/index.ts
CHANGED
|
@@ -5,10 +5,10 @@ import { XMLParser } from 'fast-xml-parser'
|
|
|
5
5
|
import fs from 'fs'
|
|
6
6
|
import logger from '../common/logger'
|
|
7
7
|
import { callCore } from '../common/runner'
|
|
8
|
-
import terminate from 'terminate/promise'
|
|
9
8
|
import listExpressEndpoints from 'express-list-endpoints'
|
|
10
9
|
import http from 'http'
|
|
11
10
|
import { AddressInfo } from 'net'
|
|
11
|
+
import { gracefulShutdown } from './shutdownUtils'
|
|
12
12
|
|
|
13
13
|
export class Stub {
|
|
14
14
|
host: string
|
|
@@ -72,7 +72,9 @@ const stopStub = async (stub: Stub) => {
|
|
|
72
72
|
javaProcess.stdout?.removeAllListeners()
|
|
73
73
|
javaProcess.stderr?.removeAllListeners()
|
|
74
74
|
javaProcess.removeAllListeners('close')
|
|
75
|
-
|
|
75
|
+
logger.debug('Trying to stop stub process gracefully ...')
|
|
76
|
+
await gracefulShutdown(javaProcess)
|
|
77
|
+
logger.debug('Completed graceful termination of the stub process')
|
|
76
78
|
logger.info(`Stub: Stopped server at ${stub.url}`)
|
|
77
79
|
}
|
|
78
80
|
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { ChildProcess } from 'child_process';
|
|
2
|
+
import nodeProcess from 'node:process';
|
|
3
|
+
import terminate from 'terminate/promise';
|
|
4
|
+
import logger from '../common/logger'
|
|
5
|
+
|
|
6
|
+
function isProcessRunning(pid: number): boolean {
|
|
7
|
+
try {
|
|
8
|
+
// Sending signal 0 doesn't kill the process, but will throw an error if the process doesn't exist
|
|
9
|
+
nodeProcess.kill(pid, 0);
|
|
10
|
+
logger.debug('Stub process is still running and needs to be terminated')
|
|
11
|
+
return true;
|
|
12
|
+
} catch (err: any) {
|
|
13
|
+
logger.debug('Stub process has shut down due to the SIGTERM signal')
|
|
14
|
+
// If process doesn't exist, ESRCH will be the error code
|
|
15
|
+
return err.code !== 'ESRCH';
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export const gracefulShutdown = async function (javaProcess: ChildProcess): Promise<void> {
|
|
20
|
+
|
|
21
|
+
logger.info('Sending SIGTERM to stop stub process')
|
|
22
|
+
javaProcess.kill('SIGTERM')
|
|
23
|
+
|
|
24
|
+
return new Promise((resolve) => {
|
|
25
|
+
setTimeout(async () => {
|
|
26
|
+
if (isProcessRunning(javaProcess.pid!)) {
|
|
27
|
+
logger.debug('Terminating stub process...')
|
|
28
|
+
await terminate(javaProcess.pid!) // Assuming terminate is a known function
|
|
29
|
+
}
|
|
30
|
+
resolve()
|
|
31
|
+
}, 1000)
|
|
32
|
+
})
|
|
33
|
+
}
|
|
34
|
+
|