specmatic 2.12.0 → 2.13.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/.github/workflows/test.yml +2 -1
- package/README.md +2 -39
- package/dist/bin/command.line.d.ts +1 -1
- package/dist/bin/command.line.js +4 -48
- package/dist/common/runner.d.ts +2 -4
- package/dist/common/runner.js +17 -17
- package/dist/config.d.ts +0 -2
- package/dist/config.js +2 -4
- package/dist/core/index.js +22 -12
- package/dist/index.d.ts +0 -2
- package/dist/index.js +1 -75
- package/package.json +3 -6
- package/specmatic.jar +0 -0
- package/src/bin/__tests__/command.line.ts +5 -83
- package/src/bin/command.line.ts +5 -34
- package/src/common/runner.ts +12 -23
- package/src/config.ts +0 -2
- package/src/core/__tests__/print.jar.version.ts +2 -2
- package/src/core/__tests__/stub.ts +38 -46
- package/src/core/__tests__/test.ts +10 -10
- package/src/core/index.ts +16 -16
- package/src/index.ts +0 -16
- package/dist/graphql/index.d.ts +0 -11
- package/dist/graphql/index.js +0 -126
- package/dist/kafka/index.d.ts +0 -13
- package/dist/kafka/index.js +0 -152
- package/src/graphql/index.ts +0 -114
- package/src/kafka/__tests__/kafkaStub.ts +0 -62
- package/src/kafka/index.ts +0 -140
package/dist/graphql/index.js
DELETED
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.stopGraphQlStub = exports.startGraphQlStub = exports.GraphQlStub = void 0;
|
|
7
|
-
var _terminate = _interopRequireDefault(require("terminate"));
|
|
8
|
-
var _logger = _interopRequireDefault(require("../common/logger"));
|
|
9
|
-
var _runner = require("../common/runner");
|
|
10
|
-
var _shutdownUtils = require("../core/shutdownUtils");
|
|
11
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
12
|
-
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); }
|
|
13
|
-
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 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 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 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; }
|
|
14
|
-
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
|
|
15
|
-
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
|
|
16
|
-
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
17
|
-
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
18
|
-
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
19
|
-
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
20
|
-
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
21
|
-
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
22
|
-
function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
|
|
23
|
-
function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
|
|
24
|
-
function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
|
|
25
|
-
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
26
|
-
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
|
|
27
|
-
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
28
|
-
var hostPortRegex = new RegExp(/.*(https?:\/\/.*):(\d+).*/);
|
|
29
|
-
var errorMessages = new RegExp("(".concat(["Address already in use", "Invalid syntax with offending token", "The system cannot find the file specified"].join("|"), ")"));
|
|
30
|
-
var GraphQlStub = exports.GraphQlStub = /*#__PURE__*/_createClass(function GraphQlStub(host, port, process, data) {
|
|
31
|
-
_classCallCheck(this, GraphQlStub);
|
|
32
|
-
_defineProperty(this, "host", void 0);
|
|
33
|
-
_defineProperty(this, "port", void 0);
|
|
34
|
-
_defineProperty(this, "data", void 0);
|
|
35
|
-
_defineProperty(this, "process", void 0);
|
|
36
|
-
this.host = host;
|
|
37
|
-
this.port = port;
|
|
38
|
-
this.process = process;
|
|
39
|
-
this.data = data;
|
|
40
|
-
});
|
|
41
|
-
var startGraphQlStub = exports.startGraphQlStub = function startGraphQlStub(host, port, data) {
|
|
42
|
-
var args = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];
|
|
43
|
-
var cmd = "stub ".concat(host ? "--host ".concat(host) : "", " ").concat(port ? "--port ".concat(port) : "", " ").concat(data ? "--data ".concat(data) : "", " ").concat(args.join(" "));
|
|
44
|
-
_logger["default"].info("GraphQl Stub: Starting server");
|
|
45
|
-
_logger["default"].debug("GraphQl Stub: Executing \"".concat(cmd, "\""));
|
|
46
|
-
return new Promise(function (resolve, reject) {
|
|
47
|
-
var javaProcess = (0, _runner.callGraphQl)(cmd,
|
|
48
|
-
// biome-ignore lint/suspicious/noExplicitAny: <explanation>
|
|
49
|
-
function (err) {
|
|
50
|
-
if (err) {
|
|
51
|
-
_logger["default"].error("GraphQl Stub: Exited with error ".concat(err));
|
|
52
|
-
}
|
|
53
|
-
}, function (message, error) {
|
|
54
|
-
if (!error) {
|
|
55
|
-
if (/^\s*$/.test(message)) {
|
|
56
|
-
return;
|
|
57
|
-
}
|
|
58
|
-
if (errorMessages.test(message)) {
|
|
59
|
-
_logger["default"].error("GraphQl Stub Error: ".concat(message));
|
|
60
|
-
return reject(message);
|
|
61
|
-
}
|
|
62
|
-
if (/Stub server is running/.test(message)) {
|
|
63
|
-
var _hostPortRegex$exec;
|
|
64
|
-
_logger["default"].info("GraphQl Stub: ".concat(message));
|
|
65
|
-
var _ref = (_hostPortRegex$exec = hostPortRegex.exec(message)) !== null && _hostPortRegex$exec !== void 0 ? _hostPortRegex$exec : [],
|
|
66
|
-
_ref2 = _slicedToArray(_ref, 3),
|
|
67
|
-
_host = _ref2[1],
|
|
68
|
-
_port = _ref2[2];
|
|
69
|
-
if (_port) {
|
|
70
|
-
return resolve(new GraphQlStub(_host, Number.parseInt(_port), javaProcess, data));
|
|
71
|
-
}
|
|
72
|
-
return reject("No port or host information available, but graphql stub server is running");
|
|
73
|
-
}
|
|
74
|
-
_logger["default"].debug("GraphQl Stub: ".concat(message));
|
|
75
|
-
} else if (/SLF4J/.test(message)) {
|
|
76
|
-
_logger["default"].debug("GraphQl Stub: ".concat(message));
|
|
77
|
-
} else {
|
|
78
|
-
_logger["default"].error("GraphQl Stub Error: ".concat(message));
|
|
79
|
-
return reject(message);
|
|
80
|
-
}
|
|
81
|
-
});
|
|
82
|
-
});
|
|
83
|
-
};
|
|
84
|
-
var stopGraphQlStub = exports.stopGraphQlStub = /*#__PURE__*/function () {
|
|
85
|
-
var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(graphQlStub) {
|
|
86
|
-
var _javaProcess$stdout, _javaProcess$stderr;
|
|
87
|
-
var javaProcess;
|
|
88
|
-
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
89
|
-
while (1) switch (_context.prev = _context.next) {
|
|
90
|
-
case 0:
|
|
91
|
-
if (graphQlStub !== null && graphQlStub !== void 0 && graphQlStub.process) {
|
|
92
|
-
_context.next = 2;
|
|
93
|
-
break;
|
|
94
|
-
}
|
|
95
|
-
return _context.abrupt("return");
|
|
96
|
-
case 2:
|
|
97
|
-
_logger["default"].debug("GraphQl Stub: Stopping server at ".concat(graphQlStub.host, ":").concat(graphQlStub.port));
|
|
98
|
-
javaProcess = graphQlStub.process;
|
|
99
|
-
(_javaProcess$stdout = javaProcess.stdout) === null || _javaProcess$stdout === void 0 || _javaProcess$stdout.removeAllListeners();
|
|
100
|
-
(_javaProcess$stderr = javaProcess.stderr) === null || _javaProcess$stderr === void 0 || _javaProcess$stderr.removeAllListeners();
|
|
101
|
-
javaProcess.removeAllListeners("close");
|
|
102
|
-
_logger["default"].debug("Trying to stop stub process gracefully ...");
|
|
103
|
-
_context.prev = 8;
|
|
104
|
-
_context.next = 11;
|
|
105
|
-
return (0, _shutdownUtils.gracefulShutdown)(javaProcess);
|
|
106
|
-
case 11:
|
|
107
|
-
_context.next = 16;
|
|
108
|
-
break;
|
|
109
|
-
case 13:
|
|
110
|
-
_context.prev = 13;
|
|
111
|
-
_context.t0 = _context["catch"](8);
|
|
112
|
-
// biome-ignore lint/style/noNonNullAssertion: <explanation>
|
|
113
|
-
(0, _terminate["default"])(javaProcess.pid);
|
|
114
|
-
case 16:
|
|
115
|
-
_logger["default"].info("GraphQl Stub: Stopped server at ".concat(graphQlStub.host, ":").concat(graphQlStub.port));
|
|
116
|
-
case 17:
|
|
117
|
-
case "end":
|
|
118
|
-
return _context.stop();
|
|
119
|
-
}
|
|
120
|
-
}, _callee, null, [[8, 13]]);
|
|
121
|
-
}));
|
|
122
|
-
return function stopGraphQlStub(_x) {
|
|
123
|
-
return _ref3.apply(this, arguments);
|
|
124
|
-
};
|
|
125
|
-
}();
|
|
126
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdGVybWluYXRlIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfbG9nZ2VyIiwiX3J1bm5lciIsIl9zaHV0ZG93blV0aWxzIiwiZSIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mIiwibyIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiY29uc3RydWN0b3IiLCJwcm90b3R5cGUiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwidCIsInIiLCJPYmplY3QiLCJuIiwiaGFzT3duUHJvcGVydHkiLCJkZWZpbmVQcm9wZXJ0eSIsInZhbHVlIiwiaSIsImEiLCJjIiwiYXN5bmNJdGVyYXRvciIsInUiLCJ0b1N0cmluZ1RhZyIsImRlZmluZSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIndyYXAiLCJHZW5lcmF0b3IiLCJjcmVhdGUiLCJDb250ZXh0IiwibWFrZUludm9rZU1ldGhvZCIsInRyeUNhdGNoIiwidHlwZSIsImFyZyIsImNhbGwiLCJoIiwibCIsImYiLCJzIiwieSIsIkdlbmVyYXRvckZ1bmN0aW9uIiwiR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUiLCJwIiwiZCIsImdldFByb3RvdHlwZU9mIiwidiIsInZhbHVlcyIsImciLCJkZWZpbmVJdGVyYXRvck1ldGhvZHMiLCJmb3JFYWNoIiwiX2ludm9rZSIsIkFzeW5jSXRlcmF0b3IiLCJpbnZva2UiLCJyZXNvbHZlIiwiX19hd2FpdCIsInRoZW4iLCJjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZyIsIkVycm9yIiwiZG9uZSIsIm1ldGhvZCIsImRlbGVnYXRlIiwibWF5YmVJbnZva2VEZWxlZ2F0ZSIsInNlbnQiLCJfc2VudCIsImRpc3BhdGNoRXhjZXB0aW9uIiwiYWJydXB0IiwiVHlwZUVycm9yIiwicmVzdWx0TmFtZSIsIm5leHQiLCJuZXh0TG9jIiwicHVzaFRyeUVudHJ5IiwidHJ5TG9jIiwiY2F0Y2hMb2MiLCJmaW5hbGx5TG9jIiwiYWZ0ZXJMb2MiLCJ0cnlFbnRyaWVzIiwicHVzaCIsInJlc2V0VHJ5RW50cnkiLCJjb21wbGV0aW9uIiwicmVzZXQiLCJpc05hTiIsImxlbmd0aCIsImRpc3BsYXlOYW1lIiwiaXNHZW5lcmF0b3JGdW5jdGlvbiIsIm5hbWUiLCJtYXJrIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJhd3JhcCIsImFzeW5jIiwiUHJvbWlzZSIsImtleXMiLCJyZXZlcnNlIiwicG9wIiwicHJldiIsImNoYXJBdCIsInNsaWNlIiwic3RvcCIsInJ2YWwiLCJoYW5kbGUiLCJjb21wbGV0ZSIsImZpbmlzaCIsIl9jYXRjaCIsImRlbGVnYXRlWWllbGQiLCJhc3luY0dlbmVyYXRvclN0ZXAiLCJfYXN5bmNUb0dlbmVyYXRvciIsImFyZ3VtZW50cyIsImFwcGx5IiwiX25leHQiLCJfdGhyb3ciLCJfc2xpY2VkVG9BcnJheSIsIl9hcnJheVdpdGhIb2xlcyIsIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIl9ub25JdGVyYWJsZVJlc3QiLCJfYXJyYXlMaWtlVG9BcnJheSIsInRvU3RyaW5nIiwiQXJyYXkiLCJmcm9tIiwidGVzdCIsImlzQXJyYXkiLCJfZGVmaW5lUHJvcGVydGllcyIsIl90b1Byb3BlcnR5S2V5Iiwia2V5IiwiX2NyZWF0ZUNsYXNzIiwiX2NsYXNzQ2FsbENoZWNrIiwiX2RlZmluZVByb3BlcnR5IiwiX3RvUHJpbWl0aXZlIiwidG9QcmltaXRpdmUiLCJTdHJpbmciLCJOdW1iZXIiLCJob3N0UG9ydFJlZ2V4IiwiUmVnRXhwIiwiZXJyb3JNZXNzYWdlcyIsImNvbmNhdCIsImpvaW4iLCJHcmFwaFFsU3R1YiIsImV4cG9ydHMiLCJob3N0IiwicG9ydCIsInByb2Nlc3MiLCJkYXRhIiwic3RhcnRHcmFwaFFsU3R1YiIsImFyZ3MiLCJ1bmRlZmluZWQiLCJjbWQiLCJsb2dnZXIiLCJpbmZvIiwiZGVidWciLCJyZWplY3QiLCJqYXZhUHJvY2VzcyIsImNhbGxHcmFwaFFsIiwiZXJyIiwiZXJyb3IiLCJtZXNzYWdlIiwiX2hvc3RQb3J0UmVnZXgkZXhlYyIsIl9yZWYiLCJleGVjIiwiX3JlZjIiLCJwYXJzZUludCIsInN0b3BHcmFwaFFsU3R1YiIsIl9yZWYzIiwiX2NhbGxlZSIsImdyYXBoUWxTdHViIiwiX2phdmFQcm9jZXNzJHN0ZG91dCIsIl9qYXZhUHJvY2VzcyRzdGRlcnIiLCJfY2FsbGVlJCIsIl9jb250ZXh0Iiwic3Rkb3V0IiwicmVtb3ZlQWxsTGlzdGVuZXJzIiwic3RkZXJyIiwiZ3JhY2VmdWxTaHV0ZG93biIsInQwIiwidGVybWluYXRlIiwicGlkIiwiX3giXSwic291cmNlcyI6WyIuLi8uLi9zcmMvZ3JhcGhxbC9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENoaWxkUHJvY2VzcyB9IGZyb20gXCJub2RlOmNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB0ZXJtaW5hdGUgZnJvbSBcInRlcm1pbmF0ZVwiO1xuaW1wb3J0IGxvZ2dlciBmcm9tIFwiLi4vY29tbW9uL2xvZ2dlclwiO1xuaW1wb3J0IHsgY2FsbEdyYXBoUWwgfSBmcm9tIFwiLi4vY29tbW9uL3J1bm5lclwiO1xuaW1wb3J0IHsgZ3JhY2VmdWxTaHV0ZG93biB9IGZyb20gXCIuLi9jb3JlL3NodXRkb3duVXRpbHNcIjtcblxuY29uc3QgaG9zdFBvcnRSZWdleCA9IG5ldyBSZWdFeHAoLy4qKGh0dHBzPzpcXC9cXC8uKik6KFxcZCspLiovKTtcbmNvbnN0IGVycm9yTWVzc2FnZXMgPSBuZXcgUmVnRXhwKFxuXHRgKCR7W1xuXHRcdFwiQWRkcmVzcyBhbHJlYWR5IGluIHVzZVwiLFxuXHRcdFwiSW52YWxpZCBzeW50YXggd2l0aCBvZmZlbmRpbmcgdG9rZW5cIixcblx0XHRcIlRoZSBzeXN0ZW0gY2Fubm90IGZpbmQgdGhlIGZpbGUgc3BlY2lmaWVkXCIsXG5cdF0uam9pbihcInxcIil9KWAsXG4pO1xuXG5leHBvcnQgY2xhc3MgR3JhcGhRbFN0dWIge1xuXHRob3N0OiBzdHJpbmc7XG5cdHBvcnQ6IG51bWJlcjtcblx0ZGF0YT86IHN0cmluZztcblx0cHJvY2VzczogQ2hpbGRQcm9jZXNzO1xuXHRjb25zdHJ1Y3Rvcihcblx0XHRob3N0OiBzdHJpbmcsXG5cdFx0cG9ydDogbnVtYmVyLFxuXHRcdHByb2Nlc3M6IENoaWxkUHJvY2Vzcyxcblx0XHRkYXRhPzogc3RyaW5nLFxuXHQpIHtcblx0XHR0aGlzLmhvc3QgPSBob3N0O1xuXHRcdHRoaXMucG9ydCA9IHBvcnQ7XG5cdFx0dGhpcy5wcm9jZXNzID0gcHJvY2Vzcztcblx0XHR0aGlzLmRhdGEgPSBkYXRhO1xuXHR9XG59XG5cbmNvbnN0IHN0YXJ0R3JhcGhRbFN0dWIgPSAoXG5cdGhvc3Q/OiBzdHJpbmcsXG5cdHBvcnQ/OiBzdHJpbmcsXG5cdGRhdGE/OiBzdHJpbmcsXG5cdGFyZ3M6IChzdHJpbmcgfCBudW1iZXIpW10gPSBbXSxcbik6IFByb21pc2U8R3JhcGhRbFN0dWI+ID0+IHtcblx0Y29uc3QgY21kID0gYHN0dWIgJHtob3N0ID8gYC0taG9zdCAke2hvc3R9YCA6IFwiXCJ9ICR7cG9ydCA/IGAtLXBvcnQgJHtwb3J0fWAgOiBcIlwifSAke2RhdGEgPyBgLS1kYXRhICR7ZGF0YX1gIDogXCJcIn0gJHthcmdzLmpvaW4oXCIgXCIpfWA7XG5cblx0bG9nZ2VyLmluZm8oXCJHcmFwaFFsIFN0dWI6IFN0YXJ0aW5nIHNlcnZlclwiKTtcblx0bG9nZ2VyLmRlYnVnKGBHcmFwaFFsIFN0dWI6IEV4ZWN1dGluZyBcIiR7Y21kfVwiYCk7XG5cblx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRjb25zdCBqYXZhUHJvY2VzcyA9IGNhbGxHcmFwaFFsKFxuXHRcdFx0Y21kLFxuXHRcdFx0Ly8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiA8ZXhwbGFuYXRpb24+XG5cdFx0XHQoZXJyOiBhbnkpID0+IHtcblx0XHRcdFx0aWYgKGVycikge1xuXHRcdFx0XHRcdGxvZ2dlci5lcnJvcihgR3JhcGhRbCBTdHViOiBFeGl0ZWQgd2l0aCBlcnJvciAke2Vycn1gKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdChtZXNzYWdlLCBlcnJvcikgPT4ge1xuXHRcdFx0XHRpZiAoIWVycm9yKSB7XG5cdFx0XHRcdFx0aWYgKC9eXFxzKiQvLnRlc3QobWVzc2FnZSkpIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoZXJyb3JNZXNzYWdlcy50ZXN0KG1lc3NhZ2UpKSB7XG5cdFx0XHRcdFx0XHRsb2dnZXIuZXJyb3IoYEdyYXBoUWwgU3R1YiBFcnJvcjogJHttZXNzYWdlfWApO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHJlamVjdChtZXNzYWdlKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoL1N0dWIgc2VydmVyIGlzIHJ1bm5pbmcvLnRlc3QobWVzc2FnZSkpIHtcblx0XHRcdFx0XHRcdGxvZ2dlci5pbmZvKGBHcmFwaFFsIFN0dWI6ICR7bWVzc2FnZX1gKTtcblx0XHRcdFx0XHRcdGNvbnN0IFssIGhvc3QsIHBvcnRdID0gaG9zdFBvcnRSZWdleC5leGVjKG1lc3NhZ2UpID8/IFtdO1xuXHRcdFx0XHRcdFx0aWYgKHBvcnQpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc29sdmUoXG5cdFx0XHRcdFx0XHRcdFx0bmV3IEdyYXBoUWxTdHViKGhvc3QsIE51bWJlci5wYXJzZUludChwb3J0KSwgamF2YVByb2Nlc3MsIGRhdGEpLFxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cmV0dXJuIHJlamVjdChcblx0XHRcdFx0XHRcdFx0XCJObyBwb3J0IG9yIGhvc3QgaW5mb3JtYXRpb24gYXZhaWxhYmxlLCBidXQgZ3JhcGhxbCBzdHViIHNlcnZlciBpcyBydW5uaW5nXCIsXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGxvZ2dlci5kZWJ1ZyhgR3JhcGhRbCBTdHViOiAke21lc3NhZ2V9YCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoL1NMRjRKLy50ZXN0KG1lc3NhZ2UpKSB7XG5cdFx0XHRcdFx0bG9nZ2VyLmRlYnVnKGBHcmFwaFFsIFN0dWI6ICR7bWVzc2FnZX1gKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRsb2dnZXIuZXJyb3IoYEdyYXBoUWwgU3R1YiBFcnJvcjogJHttZXNzYWdlfWApO1xuXHRcdFx0XHRcdHJldHVybiByZWplY3QobWVzc2FnZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0KTtcblx0fSk7XG59O1xuXG5jb25zdCBzdG9wR3JhcGhRbFN0dWIgPSBhc3luYyAoZ3JhcGhRbFN0dWI6IEdyYXBoUWxTdHViKSA9PiB7XG5cdGlmICghZ3JhcGhRbFN0dWI/LnByb2Nlc3MpIHtcblx0XHRyZXR1cm47XG5cdH1cblx0bG9nZ2VyLmRlYnVnKFxuXHRcdGBHcmFwaFFsIFN0dWI6IFN0b3BwaW5nIHNlcnZlciBhdCAke2dyYXBoUWxTdHViLmhvc3R9OiR7Z3JhcGhRbFN0dWIucG9ydH1gLFxuXHQpO1xuXHRjb25zdCBqYXZhUHJvY2VzcyA9IGdyYXBoUWxTdHViLnByb2Nlc3M7XG5cdGphdmFQcm9jZXNzLnN0ZG91dD8ucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG5cdGphdmFQcm9jZXNzLnN0ZGVycj8ucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG5cdGphdmFQcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyhcImNsb3NlXCIpO1xuXHRsb2dnZXIuZGVidWcoXCJUcnlpbmcgdG8gc3RvcCBzdHViIHByb2Nlc3MgZ3JhY2VmdWxseSAuLi5cIik7XG5cdHRyeSB7XG5cdFx0YXdhaXQgZ3JhY2VmdWxTaHV0ZG93bihqYXZhUHJvY2Vzcyk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQvLyBiaW9tZS1pZ25vcmUgbGludC9zdHlsZS9ub05vbk51bGxBc3NlcnRpb246IDxleHBsYW5hdGlvbj5cblx0XHR0ZXJtaW5hdGUoamF2YVByb2Nlc3MucGlkISk7XG5cdH1cblx0bG9nZ2VyLmluZm8oXG5cdFx0YEdyYXBoUWwgU3R1YjogU3RvcHBlZCBzZXJ2ZXIgYXQgJHtncmFwaFFsU3R1Yi5ob3N0fToke2dyYXBoUWxTdHViLnBvcnR9YCxcblx0KTtcbn07XG5cbmV4cG9ydCB7IHN0YXJ0R3JhcGhRbFN0dWIsIHN0b3BHcmFwaFFsU3R1YiB9O1xuXG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLElBQUFBLFVBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE9BQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLE9BQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLGNBQUEsR0FBQUgsT0FBQTtBQUF5RCxTQUFBRCx1QkFBQUssQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLGdCQUFBQSxDQUFBO0FBQUEsU0FBQUUsUUFBQUMsQ0FBQSxzQ0FBQUQsT0FBQSx3QkFBQUUsTUFBQSx1QkFBQUEsTUFBQSxDQUFBQyxRQUFBLGFBQUFGLENBQUEsa0JBQUFBLENBQUEsZ0JBQUFBLENBQUEsV0FBQUEsQ0FBQSx5QkFBQUMsTUFBQSxJQUFBRCxDQUFBLENBQUFHLFdBQUEsS0FBQUYsTUFBQSxJQUFBRCxDQUFBLEtBQUFDLE1BQUEsQ0FBQUcsU0FBQSxxQkFBQUosQ0FBQSxLQUFBRCxPQUFBLENBQUFDLENBQUE7QUFBQSxTQUFBSyxvQkFBQSxrQkFIekQscUpBQUFBLG1CQUFBLFlBQUFBLG9CQUFBLFdBQUFSLENBQUEsU0FBQVMsQ0FBQSxFQUFBVCxDQUFBLE9BQUFVLENBQUEsR0FBQUMsTUFBQSxDQUFBSixTQUFBLEVBQUFLLENBQUEsR0FBQUYsQ0FBQSxDQUFBRyxjQUFBLEVBQUFWLENBQUEsR0FBQVEsTUFBQSxDQUFBRyxjQUFBLGNBQUFMLENBQUEsRUFBQVQsQ0FBQSxFQUFBVSxDQUFBLElBQUFELENBQUEsQ0FBQVQsQ0FBQSxJQUFBVSxDQUFBLENBQUFLLEtBQUEsS0FBQUMsQ0FBQSx3QkFBQVos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
|
package/dist/kafka/index.d.ts
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { ChildProcess } from 'child_process';
|
|
2
|
-
export declare class KafkaStub {
|
|
3
|
-
port: number;
|
|
4
|
-
apiPort: number;
|
|
5
|
-
process: ChildProcess;
|
|
6
|
-
constructor(port: number, apiPort: number, process: ChildProcess);
|
|
7
|
-
}
|
|
8
|
-
declare const startKafkaStub: (port?: number, args?: (string | number)[]) => Promise<KafkaStub>;
|
|
9
|
-
declare const stopKafkaStub: (stub: KafkaStub) => Promise<void>;
|
|
10
|
-
declare const setKafkaStubExpectations: (stub: KafkaStub, expecations: any) => Promise<void>;
|
|
11
|
-
declare const verifyKafkaStub: (stub: KafkaStub) => Promise<Boolean>;
|
|
12
|
-
declare const verifyKafkaStubMessage: (stub: KafkaStub, topic: string, value: string) => Promise<Boolean>;
|
|
13
|
-
export { startKafkaStub, stopKafkaStub, verifyKafkaStubMessage, verifyKafkaStub, setKafkaStubExpectations };
|
package/dist/kafka/index.js
DELETED
|
@@ -1,152 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.verifyKafkaStubMessage = exports.verifyKafkaStub = exports.stopKafkaStub = exports.startKafkaStub = exports.setKafkaStubExpectations = exports.KafkaStub = void 0;
|
|
7
|
-
var _runner = require("../common/runner");
|
|
8
|
-
var _logger = _interopRequireDefault(require("../common/logger"));
|
|
9
|
-
var _axios = _interopRequireDefault(require("axios"));
|
|
10
|
-
var _promise = _interopRequireDefault(require("terminate/promise"));
|
|
11
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
12
|
-
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); }
|
|
13
|
-
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 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 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 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; }
|
|
14
|
-
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
|
|
15
|
-
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
|
|
16
|
-
function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
|
|
17
|
-
function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
|
|
18
|
-
function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
|
|
19
|
-
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
20
|
-
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
|
|
21
|
-
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
22
|
-
var KafkaStub = exports.KafkaStub = /*#__PURE__*/_createClass(function KafkaStub(port, apiPort, process) {
|
|
23
|
-
_classCallCheck(this, KafkaStub);
|
|
24
|
-
_defineProperty(this, "port", void 0);
|
|
25
|
-
_defineProperty(this, "apiPort", void 0);
|
|
26
|
-
_defineProperty(this, "process", void 0);
|
|
27
|
-
this.port = port;
|
|
28
|
-
this.apiPort = apiPort;
|
|
29
|
-
this.process = process;
|
|
30
|
-
});
|
|
31
|
-
var startKafkaStub = exports.startKafkaStub = function startKafkaStub(port, args) {
|
|
32
|
-
var cmd = "";
|
|
33
|
-
if (port) cmd += " --port=".concat(port);
|
|
34
|
-
if (args) cmd += ' ' + args.join(' ');
|
|
35
|
-
_logger["default"].info('Kafka Stub: Starting server');
|
|
36
|
-
_logger["default"].debug("Kafka Stub: Executing \"".concat(cmd, "\""));
|
|
37
|
-
return new Promise(function (resolve, reject) {
|
|
38
|
-
var port, apiPort;
|
|
39
|
-
var javaProcess = (0, _runner.callKafka)(cmd, function (err) {
|
|
40
|
-
if (err) {
|
|
41
|
-
_logger["default"].error("Kafka Stub: Exited with error ".concat(err));
|
|
42
|
-
}
|
|
43
|
-
}, function (message, error) {
|
|
44
|
-
if (!error) {
|
|
45
|
-
if (message.indexOf('Kafka started on') > -1) {
|
|
46
|
-
_logger["default"].info("Kafka Stub: ".concat(message));
|
|
47
|
-
var stubInfo = message.split('Kafka started on')[1];
|
|
48
|
-
if (stubInfo.length < 2) reject('Cannot determine port from kafka stub output');else port = parseInt(stubInfo.split(':')[1].trim());
|
|
49
|
-
} else if (message.indexOf('Starting api server on port') > -1) {
|
|
50
|
-
_logger["default"].info("Kafka Stub: ".concat(message));
|
|
51
|
-
var _stubInfo = message.split('Starting api server on port')[1];
|
|
52
|
-
if (_stubInfo.length < 2) reject('Cannot determine api port from kafka stub output');else apiPort = parseInt(_stubInfo.split(':')[1].trim());
|
|
53
|
-
} else if (message.indexOf('Listening on topic') > -1) {
|
|
54
|
-
_logger["default"].info("Kafka Stub: ".concat(message));
|
|
55
|
-
if (port && apiPort) resolve(new KafkaStub(port, apiPort, javaProcess));else reject('No port or api port information available but kafka stub listening on topic already');
|
|
56
|
-
} else if (message.indexOf('Address already in use') > -1) {
|
|
57
|
-
_logger["default"].error("Kafka Stub: ".concat(message));
|
|
58
|
-
reject('Address already in use');
|
|
59
|
-
} else {
|
|
60
|
-
_logger["default"].debug("Kafka Stub: ".concat(message));
|
|
61
|
-
}
|
|
62
|
-
} else {
|
|
63
|
-
_logger["default"].error("Kafka Stub: ".concat(message));
|
|
64
|
-
}
|
|
65
|
-
});
|
|
66
|
-
});
|
|
67
|
-
};
|
|
68
|
-
var stopKafkaStub = exports.stopKafkaStub = /*#__PURE__*/function () {
|
|
69
|
-
var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(stub) {
|
|
70
|
-
var _javaProcess$stdout, _javaProcess$stderr;
|
|
71
|
-
var javaProcess;
|
|
72
|
-
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
73
|
-
while (1) switch (_context.prev = _context.next) {
|
|
74
|
-
case 0:
|
|
75
|
-
_logger["default"].debug("Kafka Stub: Stopping at port=".concat(stub.port, ", apiPort=").concat(stub.apiPort));
|
|
76
|
-
javaProcess = stub.process;
|
|
77
|
-
(_javaProcess$stdout = javaProcess.stdout) === null || _javaProcess$stdout === void 0 || _javaProcess$stdout.removeAllListeners();
|
|
78
|
-
(_javaProcess$stderr = javaProcess.stderr) === null || _javaProcess$stderr === void 0 || _javaProcess$stderr.removeAllListeners();
|
|
79
|
-
javaProcess.removeAllListeners('close');
|
|
80
|
-
_context.next = 7;
|
|
81
|
-
return (0, _promise["default"])(javaProcess.pid);
|
|
82
|
-
case 7:
|
|
83
|
-
_logger["default"].info("Kafka Stub: Stopped at port=".concat(stub.port, ", apiPort=").concat(stub.apiPort));
|
|
84
|
-
case 8:
|
|
85
|
-
case "end":
|
|
86
|
-
return _context.stop();
|
|
87
|
-
}
|
|
88
|
-
}, _callee);
|
|
89
|
-
}));
|
|
90
|
-
return function stopKafkaStub(_x) {
|
|
91
|
-
return _ref.apply(this, arguments);
|
|
92
|
-
};
|
|
93
|
-
}();
|
|
94
|
-
var setKafkaStubExpectations = exports.setKafkaStubExpectations = function setKafkaStubExpectations(stub, expecations) {
|
|
95
|
-
var exectationsUrl = "http://localhost:".concat(stub.apiPort, "/_expectations");
|
|
96
|
-
_logger["default"].info("Kafka Set Expectations: Url is ".concat(exectationsUrl));
|
|
97
|
-
return new Promise(function (resolve, reject) {
|
|
98
|
-
_axios["default"].post("".concat(exectationsUrl), expecations, {
|
|
99
|
-
headers: {
|
|
100
|
-
Accept: 'application/json',
|
|
101
|
-
'Content-Type': 'application/json'
|
|
102
|
-
}
|
|
103
|
-
}).then(function (response) {
|
|
104
|
-
_logger["default"].debug("Kafka Set Expectations: Finished ".concat(JSON.stringify(response.data)));
|
|
105
|
-
resolve();
|
|
106
|
-
})["catch"](function (err) {
|
|
107
|
-
_logger["default"].error("Kafka Set Expectations: Failed with error ".concat(err));
|
|
108
|
-
reject("Set expectation failed with error ".concat(err));
|
|
109
|
-
});
|
|
110
|
-
});
|
|
111
|
-
};
|
|
112
|
-
var verifyKafkaStub = exports.verifyKafkaStub = function verifyKafkaStub(stub) {
|
|
113
|
-
var verificationUrl = "http://localhost:".concat(stub.apiPort, "/_expectations/verifications");
|
|
114
|
-
_logger["default"].info("Kafka Verification: Url is ".concat(verificationUrl));
|
|
115
|
-
return new Promise(function (resolve, reject) {
|
|
116
|
-
_axios["default"].post("".concat(verificationUrl), {
|
|
117
|
-
headers: {
|
|
118
|
-
Accept: 'application/json',
|
|
119
|
-
'Content-Type': 'application/json'
|
|
120
|
-
}
|
|
121
|
-
}).then(function (response) {
|
|
122
|
-
_logger["default"].debug("Kafka Verification: Finished ".concat(JSON.stringify(response.data)));
|
|
123
|
-
if (!response.data.success) _logger["default"].info("Kafka Verification: Errors\n".concat(JSON.stringify(response.data)));
|
|
124
|
-
resolve(response.data.success);
|
|
125
|
-
})["catch"](function (err) {
|
|
126
|
-
_logger["default"].error("Kafka Verification: Failed with error ".concat(err));
|
|
127
|
-
reject("Kafka verification failed with error ".concat(err));
|
|
128
|
-
});
|
|
129
|
-
});
|
|
130
|
-
};
|
|
131
|
-
var verifyKafkaStubMessage = exports.verifyKafkaStubMessage = function verifyKafkaStubMessage(stub, topic, value) {
|
|
132
|
-
var verificationUrl = "http://localhost:".concat(stub.apiPort, "/_verifications");
|
|
133
|
-
_logger["default"].info("Kafka Verify Message: Url is ".concat(verificationUrl));
|
|
134
|
-
return new Promise(function (resolve, reject) {
|
|
135
|
-
_axios["default"].post("".concat(verificationUrl), {
|
|
136
|
-
topic: topic,
|
|
137
|
-
value: value
|
|
138
|
-
}, {
|
|
139
|
-
headers: {
|
|
140
|
-
Accept: 'application/json',
|
|
141
|
-
'Content-Type': 'application/json'
|
|
142
|
-
}
|
|
143
|
-
}).then(function (response) {
|
|
144
|
-
_logger["default"].debug("Kafka Verify Message: Finished ".concat(JSON.stringify(response.data)));
|
|
145
|
-
resolve(response.data.received);
|
|
146
|
-
})["catch"](function (err) {
|
|
147
|
-
_logger["default"].error("Kafka Verify Message: Failed with error ".concat(err));
|
|
148
|
-
reject("Kafka message verification failed with error ".concat(err));
|
|
149
|
-
});
|
|
150
|
-
});
|
|
151
|
-
};
|
|
152
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcnVubmVyIiwicmVxdWlyZSIsIl9sb2dnZXIiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX2F4aW9zIiwiX3Byb21pc2UiLCJlIiwiX19lc01vZHVsZSIsIl90eXBlb2YiLCJvIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJjb25zdHJ1Y3RvciIsInByb3RvdHlwZSIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJ0IiwiciIsIk9iamVjdCIsIm4iLCJoYXNPd25Qcm9wZXJ0eSIsImRlZmluZVByb3BlcnR5IiwidmFsdWUiLCJpIiwiYSIsImMiLCJhc3luY0l0ZXJhdG9yIiwidSIsInRvU3RyaW5nVGFnIiwiZGVmaW5lIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwid3JhcCIsIkdlbmVyYXRvciIsImNyZWF0ZSIsIkNvbnRleHQiLCJtYWtlSW52b2tlTWV0aG9kIiwidHJ5Q2F0Y2giLCJ0eXBlIiwiYXJnIiwiY2FsbCIsImgiLCJsIiwiZiIsInMiLCJ5IiwiR2VuZXJhdG9yRnVuY3Rpb24iLCJHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSIsInAiLCJkIiwiZ2V0UHJvdG90eXBlT2YiLCJ2IiwidmFsdWVzIiwiZyIsImRlZmluZUl0ZXJhdG9yTWV0aG9kcyIsImZvckVhY2giLCJfaW52b2tlIiwiQXN5bmNJdGVyYXRvciIsImludm9rZSIsInJlc29sdmUiLCJfX2F3YWl0IiwidGhlbiIsImNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnIiwiRXJyb3IiLCJkb25lIiwibWV0aG9kIiwiZGVsZWdhdGUiLCJtYXliZUludm9rZURlbGVnYXRlIiwic2VudCIsIl9zZW50IiwiZGlzcGF0Y2hFeGNlcHRpb24iLCJhYnJ1cHQiLCJUeXBlRXJyb3IiLCJyZXN1bHROYW1lIiwibmV4dCIsIm5leHRMb2MiLCJwdXNoVHJ5RW50cnkiLCJ0cnlMb2MiLCJjYXRjaExvYyIsImZpbmFsbHlMb2MiLCJhZnRlckxvYyIsInRyeUVudHJpZXMiLCJwdXNoIiwicmVzZXRUcnlFbnRyeSIsImNvbXBsZXRpb24iLCJyZXNldCIsImlzTmFOIiwibGVuZ3RoIiwiZGlzcGxheU5hbWUiLCJpc0dlbmVyYXRvckZ1bmN0aW9uIiwibmFtZSIsIm1hcmsiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsImF3cmFwIiwiYXN5bmMiLCJQcm9taXNlIiwia2V5cyIsInJldmVyc2UiLCJwb3AiLCJwcmV2IiwiY2hhckF0Iiwic2xpY2UiLCJzdG9wIiwicnZhbCIsImhhbmRsZSIsImNvbXBsZXRlIiwiZmluaXNoIiwiX2NhdGNoIiwiZGVsZWdhdGVZaWVsZCIsImFzeW5jR2VuZXJhdG9yU3RlcCIsIl9hc3luY1RvR2VuZXJhdG9yIiwiYXJndW1lbnRzIiwiYXBwbHkiLCJfbmV4dCIsIl90aHJvdyIsIl9kZWZpbmVQcm9wZXJ0aWVzIiwiX3RvUHJvcGVydHlLZXkiLCJrZXkiLCJfY3JlYXRlQ2xhc3MiLCJfY2xhc3NDYWxsQ2hlY2siLCJfZGVmaW5lUHJvcGVydHkiLCJfdG9QcmltaXRpdmUiLCJ0b1ByaW1pdGl2ZSIsIlN0cmluZyIsIk51bWJlciIsIkthZmthU3R1YiIsImV4cG9ydHMiLCJwb3J0IiwiYXBpUG9ydCIsInByb2Nlc3MiLCJzdGFydEthZmthU3R1YiIsImFyZ3MiLCJjbWQiLCJjb25jYXQiLCJqb2luIiwibG9nZ2VyIiwiaW5mbyIsImRlYnVnIiwicmVqZWN0IiwiamF2YVByb2Nlc3MiLCJjYWxsS2Fma2EiLCJlcnIiLCJlcnJvciIsIm1lc3NhZ2UiLCJpbmRleE9mIiwic3R1YkluZm8iLCJzcGxpdCIsInBhcnNlSW50IiwidHJpbSIsInN0b3BLYWZrYVN0dWIiLCJfcmVmIiwiX2NhbGxlZSIsInN0dWIiLCJfamF2YVByb2Nlc3Mkc3Rkb3V0IiwiX2phdmFQcm9jZXNzJHN0ZGVyciIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJzdGRvdXQiLCJyZW1vdmVBbGxMaXN0ZW5lcnMiLCJzdGRlcnIiLCJ0ZXJtaW5hdGUiLCJwaWQiLCJfeCIsInNldEthZmthU3R1YkV4cGVjdGF0aW9ucyIsImV4cGVjYXRpb25zIiwiZXhlY3RhdGlvbnNVcmwiLCJheGlvcyIsInBvc3QiLCJoZWFkZXJzIiwiQWNjZXB0IiwicmVzcG9uc2UiLCJKU09OIiwic3RyaW5naWZ5IiwiZGF0YSIsInZlcmlmeUthZmthU3R1YiIsInZlcmlmaWNhdGlvblVybCIsInN1Y2Nlc3MiLCJ2ZXJpZnlLYWZrYVN0dWJNZXNzYWdlIiwidG9waWMiLCJyZWNlaXZlZCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9rYWZrYS9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjYWxsS2Fma2EgfSBmcm9tICcuLi9jb21tb24vcnVubmVyJztcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi4vY29tbW9uL2xvZ2dlcic7XG5pbXBvcnQgeyBDaGlsZFByb2Nlc3MgfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgdGVybWluYXRlIGZyb20gJ3Rlcm1pbmF0ZS9wcm9taXNlJztcblxuZXhwb3J0IGNsYXNzIEthZmthU3R1YiB7XG4gICAgcG9ydDogbnVtYmVyO1xuICAgIGFwaVBvcnQ6IG51bWJlcjtcbiAgICBwcm9jZXNzOiBDaGlsZFByb2Nlc3M7XG4gICAgY29uc3RydWN0b3IocG9ydDogbnVtYmVyLCBhcGlQb3J0OiBudW1iZXIsIHByb2Nlc3M6IENoaWxkUHJvY2Vzcykge1xuICAgICAgICB0aGlzLnBvcnQgPSBwb3J0O1xuICAgICAgICB0aGlzLmFwaVBvcnQgPSBhcGlQb3J0O1xuICAgICAgICB0aGlzLnByb2Nlc3MgPSBwcm9jZXNzO1xuICAgIH1cbn1cblxuY29uc3Qgc3RhcnRLYWZrYVN0dWIgPSAocG9ydD86IG51bWJlciwgYXJncz86IChzdHJpbmcgfCBudW1iZXIpW10pOiBQcm9taXNlPEthZmthU3R1Yj4gPT4ge1xuICAgIHZhciBjbWQgPSBgYDtcbiAgICBpZiAocG9ydCkgY21kICs9IGAgLS1wb3J0PSR7cG9ydH1gO1xuICAgIGlmIChhcmdzKSBjbWQgKz0gJyAnICsgYXJncy5qb2luKCcgJyk7XG5cbiAgICBsb2dnZXIuaW5mbygnS2Fma2EgU3R1YjogU3RhcnRpbmcgc2VydmVyJyk7XG4gICAgbG9nZ2VyLmRlYnVnKGBLYWZrYSBTdHViOiBFeGVjdXRpbmcgXCIke2NtZH1cImApO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgbGV0IHBvcnQ6IG51bWJlciwgYXBpUG9ydDogbnVtYmVyO1xuICAgICAgICBjb25zdCBqYXZhUHJvY2VzcyA9IGNhbGxLYWZrYShcbiAgICAgICAgICAgIGNtZCxcbiAgICAgICAgICAgIChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGBLYWZrYSBTdHViOiBFeGl0ZWQgd2l0aCBlcnJvciAke2Vycn1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgKG1lc3NhZ2UsIGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5pbmRleE9mKCdLYWZrYSBzdGFydGVkIG9uJykgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYEthZmthIFN0dWI6ICR7bWVzc2FnZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0dWJJbmZvID0gbWVzc2FnZS5zcGxpdCgnS2Fma2Egc3RhcnRlZCBvbicpWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0dWJJbmZvLmxlbmd0aCA8IDIpIHJlamVjdCgnQ2Fubm90IGRldGVybWluZSBwb3J0IGZyb20ga2Fma2Egc3R1YiBvdXRwdXQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgcG9ydCA9IHBhcnNlSW50KHN0dWJJbmZvLnNwbGl0KCc6JylbMV0udHJpbSgpKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtZXNzYWdlLmluZGV4T2YoJ1N0YXJ0aW5nIGFwaSBzZXJ2ZXIgb24gcG9ydCcpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBLYWZrYSBTdHViOiAke21lc3NhZ2V9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHViSW5mbyA9IG1lc3NhZ2Uuc3BsaXQoJ1N0YXJ0aW5nIGFwaSBzZXJ2ZXIgb24gcG9ydCcpWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0dWJJbmZvLmxlbmd0aCA8IDIpIHJlamVjdCgnQ2Fubm90IGRldGVybWluZSBhcGkgcG9ydCBmcm9tIGthZmthIHN0dWIgb3V0cHV0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGFwaVBvcnQgPSBwYXJzZUludChzdHViSW5mby5zcGxpdCgnOicpWzFdLnRyaW0oKSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobWVzc2FnZS5pbmRleE9mKCdMaXN0ZW5pbmcgb24gdG9waWMnKSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhgS2Fma2EgU3R1YjogJHttZXNzYWdlfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBvcnQgJiYgYXBpUG9ydCkgcmVzb2x2ZShuZXcgS2Fma2FTdHViKHBvcnQsIGFwaVBvcnQsIGphdmFQcm9jZXNzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHJlamVjdCgnTm8gcG9ydCBvciBhcGkgcG9ydCBpbmZvcm1hdGlvbiBhdmFpbGFibGUgYnV0IGthZmthIHN0dWIgbGlzdGVuaW5nIG9uIHRvcGljIGFscmVhZHknKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtZXNzYWdlLmluZGV4T2YoJ0FkZHJlc3MgYWxyZWFkeSBpbiB1c2UnKSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoYEthZmthIFN0dWI6ICR7bWVzc2FnZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdCgnQWRkcmVzcyBhbHJlYWR5IGluIHVzZScpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKGBLYWZrYSBTdHViOiAke21lc3NhZ2V9YCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoYEthZmthIFN0dWI6ICR7bWVzc2FnZX1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfSk7XG59O1xuXG5jb25zdCBzdG9wS2Fma2FTdHViID0gYXN5bmMgKHN0dWI6IEthZmthU3R1YikgPT4ge1xuICAgIGxvZ2dlci5kZWJ1ZyhgS2Fma2EgU3R1YjogU3RvcHBpbmcgYXQgcG9ydD0ke3N0dWIucG9ydH0sIGFwaVBvcnQ9JHtzdHViLmFwaVBvcnR9YCk7XG4gICAgY29uc3QgamF2YVByb2Nlc3MgPSBzdHViLnByb2Nlc3M7XG4gICAgamF2YVByb2Nlc3Muc3Rkb3V0Py5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICBqYXZhUHJvY2Vzcy5zdGRlcnI/LnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgIGphdmFQcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycygnY2xvc2UnKTtcbiAgICBhd2FpdCB0ZXJtaW5hdGUoamF2YVByb2Nlc3MucGlkISk7XG4gICAgbG9nZ2VyLmluZm8oYEthZmthIFN0dWI6IFN0b3BwZWQgYXQgcG9ydD0ke3N0dWIucG9ydH0sIGFwaVBvcnQ9JHtzdHViLmFwaVBvcnR9YCk7XG59O1xuXG5jb25zdCBzZXRLYWZrYVN0dWJFeHBlY3RhdGlvbnMgPSAoc3R1YjogS2Fma2FTdHViLCBleHBlY2F0aW9uczogYW55KTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgY29uc3QgZXhlY3RhdGlvbnNVcmwgPSBgaHR0cDovL2xvY2FsaG9zdDoke3N0dWIuYXBpUG9ydH0vX2V4cGVjdGF0aW9uc2A7XG4gICAgbG9nZ2VyLmluZm8oYEthZmthIFNldCBFeHBlY3RhdGlvbnM6IFVybCBpcyAke2V4ZWN0YXRpb25zVXJsfWApO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGF4aW9zXG4gICAgICAgICAgICAucG9zdChgJHtleGVjdGF0aW9uc1VybH1gLCBleHBlY2F0aW9ucywge1xuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgQWNjZXB0OiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKGBLYWZrYSBTZXQgRXhwZWN0YXRpb25zOiBGaW5pc2hlZCAke0pTT04uc3RyaW5naWZ5KHJlc3BvbnNlLmRhdGEpfWApXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGBLYWZrYSBTZXQgRXhwZWN0YXRpb25zOiBGYWlsZWQgd2l0aCBlcnJvciAke2Vycn1gKVxuICAgICAgICAgICAgICAgIHJlamVjdChgU2V0IGV4cGVjdGF0aW9uIGZhaWxlZCB3aXRoIGVycm9yICR7ZXJyfWApXG4gICAgICAgICAgICB9KVxuICAgIH0pO1xufTtcblxuY29uc3QgdmVyaWZ5S2Fma2FTdHViID0gKHN0dWI6IEthZmthU3R1Yik6IFByb21pc2U8Qm9vbGVhbj4gPT4ge1xuICAgIGNvbnN0IHZlcmlmaWNhdGlvblVybCA9IGBodHRwOi8vbG9jYWxob3N0OiR7c3R1Yi5hcGlQb3J0fS9fZXhwZWN0YXRpb25zL3ZlcmlmaWNhdGlvbnNgO1xuICAgIGxvZ2dlci5pbmZvKGBLYWZrYSBWZXJpZmljYXRpb246IFVybCBpcyAke3ZlcmlmaWNhdGlvblVybH1gKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBheGlvcy5wb3N0KGAke3ZlcmlmaWNhdGlvblVybH1gLCB7XG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgQWNjZXB0OiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhgS2Fma2EgVmVyaWZpY2F0aW9uOiBGaW5pc2hlZCAke0pTT04uc3RyaW5naWZ5KHJlc3BvbnNlLmRhdGEpfWApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc3BvbnNlLmRhdGEuc3VjY2VzcykgbG9nZ2VyLmluZm8oYEthZmthIFZlcmlmaWNhdGlvbjogRXJyb3JzXFxuJHtKU09OLnN0cmluZ2lmeShyZXNwb25zZS5kYXRhKX1gKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXNwb25zZS5kYXRhLnN1Y2Nlc3MpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihgS2Fma2EgVmVyaWZpY2F0aW9uOiBGYWlsZWQgd2l0aCBlcnJvciAke2Vycn1gKTtcbiAgICAgICAgICAgICAgICByZWplY3QoYEthZmthIHZlcmlmaWNhdGlvbiBmYWlsZWQgd2l0aCBlcnJvciAke2Vycn1gKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH0pO1xufTtcblxuY29uc3QgdmVyaWZ5S2Fma2FTdHViTWVzc2FnZSA9IChzdHViOiBLYWZrYVN0dWIsIHRvcGljOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiBQcm9taXNlPEJvb2xlYW4+ID0+IHtcbiAgICBjb25zdCB2ZXJpZmljYXRpb25VcmwgPSBgaHR0cDovL2xvY2FsaG9zdDoke3N0dWIuYXBpUG9ydH0vX3ZlcmlmaWNhdGlvbnNgO1xuICAgIGxvZ2dlci5pbmZvKGBLYWZrYSBWZXJpZnkgTWVzc2FnZTogVXJsIGlzICR7dmVyaWZpY2F0aW9uVXJsfWApO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGF4aW9zLnBvc3QoYCR7dmVyaWZpY2F0aW9uVXJsfWAsIHsgdG9waWM6IHRvcGljLCB2YWx1ZTogdmFsdWUgfSwge1xuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgIEFjY2VwdDogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhgS2Fma2EgVmVyaWZ5IE1lc3NhZ2U6IEZpbmlzaGVkICR7SlNPTi5zdHJpbmdpZnkocmVzcG9uc2UuZGF0YSl9YCk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZXNwb25zZS5kYXRhLnJlY2VpdmVkKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoYEthZmthIFZlcmlmeSBNZXNzYWdlOiBGYWlsZWQgd2l0aCBlcnJvciAke2Vycn1gKTtcbiAgICAgICAgICAgICAgICByZWplY3QoYEthZmthIG1lc3NhZ2UgdmVyaWZpY2F0aW9uIGZhaWxlZCB3aXRoIGVycm9yICR7ZXJyfWApO1xuICAgICAgICAgICAgfSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgeyBzdGFydEthZmthU3R1Yiwgc3RvcEthZmthU3R1YiwgdmVyaWZ5S2Fma2FTdHViTWVzc2FnZSwgdmVyaWZ5S2Fma2FTdHViLCBzZXRLYWZrYVN0dWJFeHBlY3RhdGlvbnMgfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsT0FBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBRUEsSUFBQUcsTUFBQSxHQUFBRCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUksUUFBQSxHQUFBRixzQkFBQSxDQUFBRixPQUFBO0FBQTBDLFNBQUFFLHVCQUFBRyxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsZ0JBQUFBLENBQUE7QUFBQSxTQUFBRSxRQUFBQyxDQUFBLHNDQUFBRCxPQUFBLHdCQUFBRSxNQUFBLHVCQUFBQSxNQUFBLENBQUFDLFFBQUEsYUFBQUYsQ0FBQSxrQkFBQUEsQ0FBQSxnQkFBQUEsQ0FBQSxXQUFBQSxDQUFBLHlCQUFBQyxNQUFBLElBQUFELENBQUEsQ0FBQUcsV0FBQSxLQUFBRixNQUFBLElBQUFELENBQUEsS0FBQUMsTUFBQSxDQUFBRyxTQUFBLHFCQUFBSixDQUFBLEtBQUFELE9BQUEsQ0FBQUMsQ0FBQTtBQUFBLFNBQUFLLG9CQUFBLGtCQUgxQyxxSkFBQUEsbUJBQUEsWUFBQUEsb0JBQUEsV0FBQVIsQ0FBQSxTQUFBUyxDQUFBLEVBQUFULENBQUEsT0FBQVUsQ0FBQSxHQUFBQyxNQUFBLENBQUFKLFNBQUEsRUFBQUssQ0FBQSxHQUFBRixDQUFBLENBQUFHLGNBQUEsRUFBQVYsQ0FBQSxHQUFBUSxNQUFBLENBQUFHLGNBQUEsY0FBQUwsQ0FBQSxFQUFBVCxDQUFBLEVB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
|
package/src/graphql/index.ts
DELETED
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
import type { ChildProcess } from "node:child_process";
|
|
2
|
-
import terminate from "terminate";
|
|
3
|
-
import logger from "../common/logger";
|
|
4
|
-
import { callGraphQl } from "../common/runner";
|
|
5
|
-
import { gracefulShutdown } from "../core/shutdownUtils";
|
|
6
|
-
|
|
7
|
-
const hostPortRegex = new RegExp(/.*(https?:\/\/.*):(\d+).*/);
|
|
8
|
-
const errorMessages = new RegExp(
|
|
9
|
-
`(${[
|
|
10
|
-
"Address already in use",
|
|
11
|
-
"Invalid syntax with offending token",
|
|
12
|
-
"The system cannot find the file specified",
|
|
13
|
-
].join("|")})`,
|
|
14
|
-
);
|
|
15
|
-
|
|
16
|
-
export class GraphQlStub {
|
|
17
|
-
host: string;
|
|
18
|
-
port: number;
|
|
19
|
-
data?: string;
|
|
20
|
-
process: ChildProcess;
|
|
21
|
-
constructor(
|
|
22
|
-
host: string,
|
|
23
|
-
port: number,
|
|
24
|
-
process: ChildProcess,
|
|
25
|
-
data?: string,
|
|
26
|
-
) {
|
|
27
|
-
this.host = host;
|
|
28
|
-
this.port = port;
|
|
29
|
-
this.process = process;
|
|
30
|
-
this.data = data;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
const startGraphQlStub = (
|
|
35
|
-
host?: string,
|
|
36
|
-
port?: string,
|
|
37
|
-
data?: string,
|
|
38
|
-
args: (string | number)[] = [],
|
|
39
|
-
): Promise<GraphQlStub> => {
|
|
40
|
-
const cmd = `stub ${host ? `--host ${host}` : ""} ${port ? `--port ${port}` : ""} ${data ? `--data ${data}` : ""} ${args.join(" ")}`;
|
|
41
|
-
|
|
42
|
-
logger.info("GraphQl Stub: Starting server");
|
|
43
|
-
logger.debug(`GraphQl Stub: Executing "${cmd}"`);
|
|
44
|
-
|
|
45
|
-
return new Promise((resolve, reject) => {
|
|
46
|
-
const javaProcess = callGraphQl(
|
|
47
|
-
cmd,
|
|
48
|
-
// biome-ignore lint/suspicious/noExplicitAny: <explanation>
|
|
49
|
-
(err: any) => {
|
|
50
|
-
if (err) {
|
|
51
|
-
logger.error(`GraphQl Stub: Exited with error ${err}`);
|
|
52
|
-
}
|
|
53
|
-
},
|
|
54
|
-
(message, error) => {
|
|
55
|
-
if (!error) {
|
|
56
|
-
if (/^\s*$/.test(message)) {
|
|
57
|
-
return;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
if (errorMessages.test(message)) {
|
|
61
|
-
logger.error(`GraphQl Stub Error: ${message}`);
|
|
62
|
-
return reject(message);
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
if (/Stub server is running/.test(message)) {
|
|
66
|
-
logger.info(`GraphQl Stub: ${message}`);
|
|
67
|
-
const [, host, port] = hostPortRegex.exec(message) ?? [];
|
|
68
|
-
if (port) {
|
|
69
|
-
return resolve(
|
|
70
|
-
new GraphQlStub(host, Number.parseInt(port), javaProcess, data),
|
|
71
|
-
);
|
|
72
|
-
}
|
|
73
|
-
return reject(
|
|
74
|
-
"No port or host information available, but graphql stub server is running",
|
|
75
|
-
);
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
logger.debug(`GraphQl Stub: ${message}`);
|
|
79
|
-
} else if (/SLF4J/.test(message)) {
|
|
80
|
-
logger.debug(`GraphQl Stub: ${message}`);
|
|
81
|
-
} else {
|
|
82
|
-
logger.error(`GraphQl Stub Error: ${message}`);
|
|
83
|
-
return reject(message);
|
|
84
|
-
}
|
|
85
|
-
},
|
|
86
|
-
);
|
|
87
|
-
});
|
|
88
|
-
};
|
|
89
|
-
|
|
90
|
-
const stopGraphQlStub = async (graphQlStub: GraphQlStub) => {
|
|
91
|
-
if (!graphQlStub?.process) {
|
|
92
|
-
return;
|
|
93
|
-
}
|
|
94
|
-
logger.debug(
|
|
95
|
-
`GraphQl Stub: Stopping server at ${graphQlStub.host}:${graphQlStub.port}`,
|
|
96
|
-
);
|
|
97
|
-
const javaProcess = graphQlStub.process;
|
|
98
|
-
javaProcess.stdout?.removeAllListeners();
|
|
99
|
-
javaProcess.stderr?.removeAllListeners();
|
|
100
|
-
javaProcess.removeAllListeners("close");
|
|
101
|
-
logger.debug("Trying to stop stub process gracefully ...");
|
|
102
|
-
try {
|
|
103
|
-
await gracefulShutdown(javaProcess);
|
|
104
|
-
} catch (e) {
|
|
105
|
-
// biome-ignore lint/style/noNonNullAssertion: <explanation>
|
|
106
|
-
terminate(javaProcess.pid!);
|
|
107
|
-
}
|
|
108
|
-
logger.info(
|
|
109
|
-
`GraphQl Stub: Stopped server at ${graphQlStub.host}:${graphQlStub.port}`,
|
|
110
|
-
);
|
|
111
|
-
};
|
|
112
|
-
|
|
113
|
-
export { startGraphQlStub, stopGraphQlStub };
|
|
114
|
-
|