specmatic 0.72.2 → 0.72.3

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.
@@ -12,42 +12,46 @@ var _logger = _interopRequireDefault(require("../common/logger"));
12
12
  var _runner = require("../common/runner");
13
13
  var _promise = _interopRequireDefault(require("terminate/promise"));
14
14
  var _expressListEndpoints = _interopRequireDefault(require("express-list-endpoints"));
15
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
16
+ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
17
+ 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 exports; }; var exports = {}, Op = Object.prototype, hasOwn = Op.hasOwnProperty, defineProperty = Object.defineProperty || function (obj, key, desc) { obj[key] = desc.value; }, $Symbol = "function" == typeof Symbol ? Symbol : {}, iteratorSymbol = $Symbol.iterator || "@@iterator", asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator", toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; function define(obj, key, value) { return Object.defineProperty(obj, key, { value: value, enumerable: !0, configurable: !0, writable: !0 }), obj[key]; } try { define({}, ""); } catch (err) { define = function define(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = Object.create(protoGenerator.prototype), context = new Context(tryLocsList || []); return defineProperty(generator, "_invoke", { value: makeInvokeMethod(innerFn, self, context) }), generator; } function tryCatch(fn, obj, arg) { try { return { type: "normal", arg: fn.call(obj, arg) }; } catch (err) { return { type: "throw", arg: err }; } } exports.wrap = wrap; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; define(IteratorPrototype, iteratorSymbol, function () { return this; }); var getProto = Object.getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([]))); NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype); var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); function defineIteratorMethods(prototype) { ["next", "throw", "return"].forEach(function (method) { define(prototype, method, function (arg) { return this._invoke(method, arg); }); }); } function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if ("throw" !== record.type) { var result = record.arg, value = result.value; return value && "object" == _typeof(value) && hasOwn.call(value, "__await") ? PromiseImpl.resolve(value.__await).then(function (value) { invoke("next", value, resolve, reject); }, function (err) { invoke("throw", err, resolve, reject); }) : PromiseImpl.resolve(value).then(function (unwrapped) { result.value = unwrapped, resolve(result); }, function (error) { return invoke("throw", error, resolve, reject); }); } reject(record.arg); } var previousPromise; defineProperty(this, "_invoke", { value: function value(method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(innerFn, self, context) { var state = "suspendedStart"; return function (method, arg) { if ("executing" === state) throw new Error("Generator is already running"); if ("completed" === state) { if ("throw" === method) throw arg; return doneResult(); } for (context.method = method, context.arg = arg;;) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if ("next" === context.method) context.sent = context._sent = context.arg;else if ("throw" === context.method) { if ("suspendedStart" === state) throw state = "completed", context.arg; context.dispatchException(context.arg); } else "return" === context.method && context.abrupt("return", context.arg); state = "executing"; var record = tryCatch(innerFn, self, context); if ("normal" === record.type) { if (state = context.done ? "completed" : "suspendedYield", record.arg === ContinueSentinel) continue; return { value: record.arg, done: context.done }; } "throw" === record.type && (state = "completed", context.method = "throw", context.arg = record.arg); } }; } function maybeInvokeDelegate(delegate, context) { var methodName = context.method, method = delegate.iterator[methodName]; if (undefined === method) return context.delegate = null, "throw" === methodName && delegate.iterator["return"] && (context.method = "return", context.arg = undefined, maybeInvokeDelegate(delegate, context), "throw" === context.method) || "return" !== methodName && (context.method = "throw", context.arg = new TypeError("The iterator does not provide a '" + methodName + "' method")), ContinueSentinel; var record = tryCatch(method, delegate.iterator, context.arg); if ("throw" === record.type) return context.method = "throw", context.arg = record.arg, context.delegate = null, ContinueSentinel; var info = record.arg; return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, "return" !== context.method && (context.method = "next", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = "throw", context.arg = new TypeError("iterator result is not an object"), context.delegate = null, ContinueSentinel); } function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = "normal", delete record.arg, entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: "root" }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0); } function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) return iteratorMethod.call(iterable); if ("function" == typeof iterable.next) return iterable; if (!isNaN(iterable.length)) { var i = -1, next = function next() { for (; ++i < iterable.length;) if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next; return next.value = undefined, next.done = !0, next; }; return next.next = next; } } return { next: doneResult }; } function doneResult() { return { value: undefined, done: !0 }; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, defineProperty(Gp, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), defineProperty(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"), exports.isGeneratorFunction = function (genFun) { var ctor = "function" == typeof genFun && genFun.constructor; return !!ctor && (ctor === GeneratorFunction || "GeneratorFunction" === (ctor.displayName || ctor.name)); }, exports.mark = function (genFun) { return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, "GeneratorFunction")), genFun.prototype = Object.create(Gp), genFun; }, exports.awrap = function (arg) { return { __await: arg }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () { return this; }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { void 0 === PromiseImpl && (PromiseImpl = Promise); var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, "Generator"), define(Gp, iteratorSymbol, function () { return this; }), define(Gp, "toString", function () { return "[object Generator]"; }), exports.keys = function (val) { var object = Object(val), keys = []; for (var key in object) keys.push(key); return keys.reverse(), function next() { for (; keys.length;) { var key = keys.pop(); if (key in object) return next.value = key, next.done = !1, next; } return next.done = !0, next; }; }, exports.values = values, Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = "next", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) "t" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined); }, stop: function stop() { this.done = !0; var rootRecord = this.tryEntries[0].completion; if ("throw" === rootRecord.type) throw rootRecord.arg; return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) throw exception; var context = this; function handle(loc, caught) { return record.type = "throw", record.arg = exception, context.next = loc, caught && (context.method = "next", context.arg = undefined), !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i], record = entry.completion; if ("root" === entry.tryLoc) return handle("end"); if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, "catchLoc"), hasFinally = hasOwn.call(entry, "finallyLoc"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } else if (hasCatch) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); } else { if (!hasFinally) throw new Error("try statement without catch or finally"); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } finallyEntry && ("break" === type || "continue" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null); var record = finallyEntry ? finallyEntry.completion : {}; return record.type = type, record.arg = arg, finallyEntry ? (this.method = "next", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record); }, complete: function complete(record, afterLoc) { if ("throw" === record.type) throw record.arg; return "break" === record.type || "continue" === record.type ? this.next = record.arg : "return" === record.type ? (this.rval = this.arg = record.arg, this.method = "return", this.next = "end") : "normal" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel; } }, "catch": function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if ("throw" === record.type) { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { return this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }, "next" === this.method && (this.arg = undefined), ContinueSentinel; } }, exports; }
16
18
  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); } }
17
19
  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); }); }; }
20
+ function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
21
+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
22
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
18
23
  function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
19
- function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
20
- function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
24
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
25
+ function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
21
26
  var END_POINTS_API_ROUTE = '_specmatic/endpoints';
22
- class Stub {
23
- constructor(host, port, url, process) {
24
- _defineProperty(this, "host", void 0);
25
- _defineProperty(this, "port", void 0);
26
- _defineProperty(this, "url", void 0);
27
- _defineProperty(this, "process", void 0);
28
- this.host = host;
29
- this.port = port;
30
- this.url = url;
31
- this.process = process;
32
- }
33
- }
27
+ var Stub = /*#__PURE__*/_createClass(function Stub(host, port, url, process) {
28
+ _classCallCheck(this, Stub);
29
+ _defineProperty(this, "host", void 0);
30
+ _defineProperty(this, "port", void 0);
31
+ _defineProperty(this, "url", void 0);
32
+ _defineProperty(this, "process", void 0);
33
+ this.host = host;
34
+ this.port = port;
35
+ this.url = url;
36
+ this.process = process;
37
+ });
34
38
  exports.Stub = Stub;
35
- var startStub = (host, port, args) => {
39
+ var startStub = function startStub(host, port, args) {
36
40
  var cmd = "stub";
37
41
  if (host) cmd += " --host=".concat(host);
38
42
  if (port) cmd += " --port=".concat(port);
39
43
  if (args) cmd += ' ' + args.join(' ');
40
- _logger.default.info('Stub: Starting server');
41
- _logger.default.debug("Stub: Executing \"".concat(cmd, "\""));
42
- return new Promise((resolve, reject) => {
43
- var javaProcess = (0, _runner.callSpecmatic)(cmd, err => {
44
+ _logger["default"].info('Stub: Starting server');
45
+ _logger["default"].debug("Stub: Executing \"".concat(cmd, "\""));
46
+ return new Promise(function (resolve, reject) {
47
+ var javaProcess = (0, _runner.callSpecmatic)(cmd, function (err) {
44
48
  if (err) {
45
- _logger.default.error("Stub: Exited with error ".concat(err));
49
+ _logger["default"].error("Stub: Exited with error ".concat(err));
46
50
  }
47
- }, (message, error) => {
51
+ }, function (message, error) {
48
52
  if (!error) {
49
53
  if (message.indexOf('Stub server is running') > -1) {
50
- _logger.default.info("Stub: ".concat(message));
54
+ _logger["default"].info("Stub: ".concat(message));
51
55
  var stubInfo = message.split('on');
52
56
  if (stubInfo.length < 2) reject('Cannot determine url from stub output');else {
53
57
  var _urlInfo$length;
@@ -56,73 +60,86 @@ var startStub = (host, port, args) => {
56
60
  if (((_urlInfo$length = urlInfo === null || urlInfo === void 0 ? void 0 : urlInfo.length) !== null && _urlInfo$length !== void 0 ? _urlInfo$length : 0) < 4) reject('Cannot determine host and port from stub output');else resolve(new Stub(urlInfo[2], parseInt(urlInfo[3]), urlInfo[0], javaProcess));
57
61
  }
58
62
  } else if (message.indexOf('Address already in use') > -1) {
59
- _logger.default.error("Stub: ".concat(message));
63
+ _logger["default"].error("Stub: ".concat(message));
60
64
  reject('Address already in use');
61
65
  } else {
62
- _logger.default.debug("Stub: ".concat(message));
66
+ _logger["default"].debug("Stub: ".concat(message));
63
67
  }
64
68
  } else {
65
- _logger.default.error("Stub: ".concat(message));
69
+ _logger["default"].error("Stub: ".concat(message));
66
70
  }
67
71
  });
68
72
  });
69
73
  };
70
74
  exports.startStub = startStub;
71
75
  var stopStub = /*#__PURE__*/function () {
72
- var _ref = _asyncToGenerator(function* (stub) {
76
+ var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(stub) {
73
77
  var _javaProcess$stdout, _javaProcess$stderr;
74
- _logger.default.debug("Stub: Stopping server at ".concat(stub.url));
75
- var javaProcess = stub.process;
76
- (_javaProcess$stdout = javaProcess.stdout) === null || _javaProcess$stdout === void 0 ? void 0 : _javaProcess$stdout.removeAllListeners();
77
- (_javaProcess$stderr = javaProcess.stderr) === null || _javaProcess$stderr === void 0 ? void 0 : _javaProcess$stderr.removeAllListeners();
78
- javaProcess.removeAllListeners('close');
79
- yield (0, _promise.default)(javaProcess.pid);
80
- _logger.default.info("Stub: Stopped server at ".concat(stub.url));
81
- });
78
+ var javaProcess;
79
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
80
+ while (1) switch (_context.prev = _context.next) {
81
+ case 0:
82
+ _logger["default"].debug("Stub: Stopping server at ".concat(stub.url));
83
+ javaProcess = stub.process;
84
+ (_javaProcess$stdout = javaProcess.stdout) === null || _javaProcess$stdout === void 0 ? void 0 : _javaProcess$stdout.removeAllListeners();
85
+ (_javaProcess$stderr = javaProcess.stderr) === null || _javaProcess$stderr === void 0 ? void 0 : _javaProcess$stderr.removeAllListeners();
86
+ javaProcess.removeAllListeners('close');
87
+ _context.next = 7;
88
+ return (0, _promise["default"])(javaProcess.pid);
89
+ case 7:
90
+ _logger["default"].info("Stub: Stopped server at ".concat(stub.url));
91
+ case 8:
92
+ case "end":
93
+ return _context.stop();
94
+ }
95
+ }, _callee);
96
+ }));
82
97
  return function stopStub(_x) {
83
98
  return _ref.apply(this, arguments);
84
99
  };
85
100
  }();
86
101
  exports.stopStub = stopStub;
87
- var test = (host, port, contractPath, args) => {
102
+ var test = function test(host, port, contractPath, args) {
88
103
  if (process.env['endpointsAPI']) {
89
104
  var apiEndPointUrl = host && port ? "http://".concat(host, ":").concat(port, "/").concat(END_POINTS_API_ROUTE) : "http://localhost:8080/".concat(END_POINTS_API_ROUTE);
90
105
  process.env['endpointsAPI'] = apiEndPointUrl;
91
106
  }
92
- var specsPath = _path.default.resolve(contractPath + '');
107
+ var specsPath = _path["default"].resolve(contractPath + '');
93
108
  var cmd = "test";
94
109
  if (contractPath) cmd += " ".concat(specsPath);
95
110
  cmd += ' --junitReportDir=dist/test-report';
96
111
  if (host) cmd += " --host=".concat(host);
97
112
  if (port) cmd += " --port=".concat(port);
98
113
  if (args) cmd += ' ' + args.join(' ');
99
- _logger.default.info('Test: Running');
100
- _logger.default.debug("Test: Executing \"".concat(cmd, "\""));
101
- var reportDir = _path.default.resolve('dist/test-report');
102
- _fs.default.rmSync(reportDir, {
114
+ _logger["default"].info('Test: Running');
115
+ _logger["default"].debug("Test: Executing \"".concat(cmd, "\""));
116
+ var reportDir = _path["default"].resolve('dist/test-report');
117
+ _fs["default"].rmSync(reportDir, {
103
118
  recursive: true,
104
119
  force: true
105
120
  });
106
- return new Promise((resolve, _reject) => {
107
- (0, _runner.callSpecmatic)(cmd, err => {
108
- if (err) _logger.default.error("Test: Failed with error ".concat(err));
121
+ return new Promise(function (resolve, _reject) {
122
+ (0, _runner.callSpecmatic)(cmd, function (err) {
123
+ if (err) _logger["default"].error("Test: Failed with error ".concat(err));
109
124
  var testCases = parseJunitXML();
110
125
  var total = testCases.length;
111
- var failure = testCases.filter(testcase => testcase['failure'] || testcase['skipped']).length;
126
+ var failure = testCases.filter(function (testcase) {
127
+ return testcase['failure'] || testcase['skipped'];
128
+ }).length;
112
129
  var success = total - failure;
113
130
  var result = {
114
- total,
115
- success,
116
- failure
131
+ total: total,
132
+ success: success,
133
+ failure: failure
117
134
  };
118
135
  resolve(result);
119
- }, (message, error) => {
120
- _logger.default[error ? 'error' : 'debug']("Test: ".concat(message));
136
+ }, function (message, error) {
137
+ _logger["default"][error ? 'error' : 'debug']("Test: ".concat(message));
121
138
  });
122
139
  });
123
140
  };
124
141
  exports.test = test;
125
- var showTestResults = testFn => {
142
+ var showTestResults = function showTestResults(testFn) {
126
143
  var testCases = parseJunitXML();
127
144
  testCases.map(function (testcase) {
128
145
  var name = 'No Name';
@@ -130,78 +147,94 @@ var showTestResults = testFn => {
130
147
  var nameTempArr = testcase['system-out'].trim().replace(/\n/g, '').split(/display-name:.*Scenario: /);
131
148
  if (nameTempArr.length > 1) name = nameTempArr[1].trim();
132
149
  }
133
- testFn(name, () => {
150
+ testFn(name, function () {
134
151
  if (testcase.failure || testcase.skipped) throw new Error('Did not pass');
135
152
  });
136
153
  });
137
154
  };
138
155
  exports.showTestResults = showTestResults;
139
- var setExpectations = (stubPath, stubServerBaseUrl) => {
140
- var stubResponse = require(_path.default.resolve(stubPath));
156
+ var setExpectations = function setExpectations(stubPath, stubServerBaseUrl) {
157
+ var stubResponse = require(_path["default"].resolve(stubPath));
141
158
  stubServerBaseUrl = stubServerBaseUrl || 'http://localhost:9000';
142
- _logger.default.info("Set Expectations: Stub url is ".concat(stubServerBaseUrl));
143
- return new Promise((resolve, reject) => {
144
- (0, _nodeFetch.default)("".concat(stubServerBaseUrl, "/_specmatic/expectations"), {
159
+ _logger["default"].info("Set Expectations: Stub url is ".concat(stubServerBaseUrl));
160
+ return new Promise(function (resolve, reject) {
161
+ (0, _nodeFetch["default"])("".concat(stubServerBaseUrl, "/_specmatic/expectations"), {
145
162
  method: 'POST',
146
163
  body: JSON.stringify(stubResponse)
147
164
  }).then( /*#__PURE__*/function () {
148
- var _ref2 = _asyncToGenerator(function* (response) {
149
- if (response.status != 200) {
150
- _logger.default.error("Set Expectations: Failed with status code ".concat(response.status));
151
- var body = yield response.text();
152
- _logger.default.error(body);
153
- reject("Setting expecation failed");
154
- } else {
155
- _logger.default.info('Set Expectations: Finished');
156
- resolve();
157
- }
158
- });
165
+ var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(response) {
166
+ var body;
167
+ return _regeneratorRuntime().wrap(function _callee2$(_context2) {
168
+ while (1) switch (_context2.prev = _context2.next) {
169
+ case 0:
170
+ if (!(response.status != 200)) {
171
+ _context2.next = 9;
172
+ break;
173
+ }
174
+ _logger["default"].error("Set Expectations: Failed with status code ".concat(response.status));
175
+ _context2.next = 4;
176
+ return response.text();
177
+ case 4:
178
+ body = _context2.sent;
179
+ _logger["default"].error(body);
180
+ reject("Setting expecation failed");
181
+ _context2.next = 11;
182
+ break;
183
+ case 9:
184
+ _logger["default"].info('Set Expectations: Finished');
185
+ resolve();
186
+ case 11:
187
+ case "end":
188
+ return _context2.stop();
189
+ }
190
+ }, _callee2);
191
+ }));
159
192
  return function (_x2) {
160
193
  return _ref2.apply(this, arguments);
161
194
  };
162
- }()).catch(err => {
163
- _logger.default.error("Set Expectations: Failed with error ".concat(err));
195
+ }())["catch"](function (err) {
196
+ _logger["default"].error("Set Expectations: Failed with error ".concat(err));
164
197
  reject("Setting expecation failed with error ".concat(err));
165
198
  });
166
199
  });
167
200
  };
168
201
  exports.setExpectations = setExpectations;
169
- var printJarVersion = () => {
202
+ var printJarVersion = function printJarVersion() {
170
203
  var cmd = "--version";
171
- _logger.default.info('Print Jar Version: Running');
172
- _logger.default.debug("Print Jar Version: Executing \"".concat(cmd, "\""));
173
- (0, _runner.callSpecmatic)(cmd, err => {
174
- if (err) _logger.default.error("Print Jar Version: Failed with error ".concat(err));
175
- }, (message, error) => {
176
- if (error) _logger.default.error("Print Jar Version: ".concat(message));else console.log("".concat(message));
204
+ _logger["default"].info('Print Jar Version: Running');
205
+ _logger["default"].debug("Print Jar Version: Executing \"".concat(cmd, "\""));
206
+ (0, _runner.callSpecmatic)(cmd, function (err) {
207
+ if (err) _logger["default"].error("Print Jar Version: Failed with error ".concat(err));
208
+ }, function (message, error) {
209
+ if (error) _logger["default"].error("Print Jar Version: ".concat(message));else console.log("".concat(message));
177
210
  });
178
211
  };
179
212
  exports.printJarVersion = printJarVersion;
180
- var listEndPoints = expressApp => {
181
- var details = (0, _expressListEndpoints.default)(expressApp);
213
+ var listEndPoints = function listEndPoints(expressApp) {
214
+ var details = (0, _expressListEndpoints["default"])(expressApp);
182
215
  var endPoints = {};
183
- details.map(apiDetail => {
216
+ details.map(function (apiDetail) {
184
217
  endPoints[apiDetail.path] = apiDetail.methods;
185
218
  });
186
219
  delete endPoints["/".concat(END_POINTS_API_ROUTE)];
187
220
  return endPoints;
188
221
  };
189
- var enableApiCoverage = expressApp => {
222
+ var enableApiCoverage = function enableApiCoverage(expressApp) {
190
223
  process.env['endpointsAPI'] = END_POINTS_API_ROUTE;
191
224
  addEndPointsRoute(expressApp);
192
- _logger.default.info("Endpoints API registered at ".concat(END_POINTS_API_ROUTE));
225
+ _logger["default"].info("Endpoints API registered at ".concat(END_POINTS_API_ROUTE));
193
226
  };
194
227
  exports.enableApiCoverage = enableApiCoverage;
195
- var parseJunitXML = () => {
196
- var reportPath = _path.default.resolve('dist/test-report/TEST-junit-jupiter.xml');
197
- var data = _fs.default.readFileSync(reportPath);
228
+ var parseJunitXML = function parseJunitXML() {
229
+ var reportPath = _path["default"].resolve('dist/test-report/TEST-junit-jupiter.xml');
230
+ var data = _fs["default"].readFileSync(reportPath);
198
231
  var parser = new _fastXmlParser.XMLParser();
199
232
  var resultXml = parser.parse(data);
200
233
  resultXml.testsuite.testcase = Array.isArray(resultXml.testsuite.testcase) ? resultXml.testsuite.testcase : [resultXml.testsuite.testcase];
201
234
  return resultXml.testsuite.testcase;
202
235
  };
203
- var addEndPointsRoute = expressApp => {
204
- expressApp.get("/".concat(END_POINTS_API_ROUTE), (_req, res) => {
236
+ var addEndPointsRoute = function addEndPointsRoute(expressApp) {
237
+ expressApp.get("/".concat(END_POINTS_API_ROUTE), function (_req, res) {
205
238
  var endPoints = listEndPoints(expressApp);
206
239
  var springActuatorPayload = {
207
240
  contexts: {
@@ -214,7 +247,7 @@ var addEndPointsRoute = expressApp => {
214
247
  }
215
248
  }
216
249
  };
217
- Object.keys(endPoints).sort().map(path => {
250
+ Object.keys(endPoints).sort().map(function (path) {
218
251
  springActuatorPayload.contexts.application.mappings.dispatcherServlets.dispatcherServlet.push({
219
252
  details: {
220
253
  requestMappingConditions: {
@@ -226,4 +259,5 @@ var addEndPointsRoute = expressApp => {
226
259
  });
227
260
  res.send(springActuatorPayload);
228
261
  });
229
- };
262
+ };
263
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbm9kZUZldGNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfcGF0aCIsIl9mYXN0WG1sUGFyc2VyIiwiX2ZzIiwiX2xvZ2dlciIsIl9ydW5uZXIiLCJfcHJvbWlzZSIsIl9leHByZXNzTGlzdEVuZHBvaW50cyIsIm9iaiIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJjb25zdHJ1Y3RvciIsInByb3RvdHlwZSIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJleHBvcnRzIiwiT3AiLCJPYmplY3QiLCJoYXNPd24iLCJoYXNPd25Qcm9wZXJ0eSIsImRlZmluZVByb3BlcnR5Iiwia2V5IiwiZGVzYyIsInZhbHVlIiwiJFN5bWJvbCIsIml0ZXJhdG9yU3ltYm9sIiwiYXN5bmNJdGVyYXRvclN5bWJvbCIsImFzeW5jSXRlcmF0b3IiLCJ0b1N0cmluZ1RhZ1N5bWJvbCIsInRvU3RyaW5nVGFnIiwiZGVmaW5lIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiZXJyIiwid3JhcCIsImlubmVyRm4iLCJvdXRlckZuIiwic2VsZiIsInRyeUxvY3NMaXN0IiwicHJvdG9HZW5lcmF0b3IiLCJHZW5lcmF0b3IiLCJnZW5lcmF0b3IiLCJjcmVhdGUiLCJjb250ZXh0IiwiQ29udGV4dCIsIm1ha2VJbnZva2VNZXRob2QiLCJ0cnlDYXRjaCIsImZuIiwiYXJnIiwidHlwZSIsImNhbGwiLCJDb250aW51ZVNlbnRpbmVsIiwiR2VuZXJhdG9yRnVuY3Rpb24iLCJHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSIsIkl0ZXJhdG9yUHJvdG90eXBlIiwiZ2V0UHJvdG8iLCJnZXRQcm90b3R5cGVPZiIsIk5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlIiwidmFsdWVzIiwiR3AiLCJkZWZpbmVJdGVyYXRvck1ldGhvZHMiLCJmb3JFYWNoIiwibWV0aG9kIiwiX2ludm9rZSIsIkFzeW5jSXRlcmF0b3IiLCJQcm9taXNlSW1wbCIsImludm9rZSIsInJlc29sdmUiLCJyZWplY3QiLCJyZWNvcmQiLCJyZXN1bHQiLCJfX2F3YWl0IiwidGhlbiIsInVud3JhcHBlZCIsImVycm9yIiwicHJldmlvdXNQcm9taXNlIiwiY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmciLCJzdGF0ZSIsIkVycm9yIiwiZG9uZVJlc3VsdCIsImRlbGVnYXRlIiwiZGVsZWdhdGVSZXN1bHQiLCJtYXliZUludm9rZURlbGVnYXRlIiwic2VudCIsIl9zZW50IiwiZGlzcGF0Y2hFeGNlcHRpb24iLCJhYnJ1cHQiLCJkb25lIiwibWV0aG9kTmFtZSIsInVuZGVmaW5lZCIsIlR5cGVFcnJvciIsImluZm8iLCJyZXN1bHROYW1lIiwibmV4dCIsIm5leHRMb2MiLCJwdXNoVHJ5RW50cnkiLCJsb2NzIiwiZW50cnkiLCJ0cnlMb2MiLCJjYXRjaExvYyIsImZpbmFsbHlMb2MiLCJhZnRlckxvYyIsInRyeUVudHJpZXMiLCJwdXNoIiwicmVzZXRUcnlFbnRyeSIsImNvbXBsZXRpb24iLCJyZXNldCIsIml0ZXJhYmxlIiwiaXRlcmF0b3JNZXRob2QiLCJpc05hTiIsImxlbmd0aCIsImkiLCJkaXNwbGF5TmFtZSIsImlzR2VuZXJhdG9yRnVuY3Rpb24iLCJnZW5GdW4iLCJjdG9yIiwibmFtZSIsIm1hcmsiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsImF3cmFwIiwiYXN5bmMiLCJQcm9taXNlIiwiaXRlciIsImtleXMiLCJ2YWwiLCJvYmplY3QiLCJyZXZlcnNlIiwicG9wIiwic2tpcFRlbXBSZXNldCIsInByZXYiLCJjaGFyQXQiLCJzbGljZSIsInN0b3AiLCJyb290UmVjb3JkIiwicnZhbCIsImV4Y2VwdGlvbiIsImhhbmRsZSIsImxvYyIsImNhdWdodCIsImhhc0NhdGNoIiwiaGFzRmluYWxseSIsImZpbmFsbHlFbnRyeSIsImNvbXBsZXRlIiwiZmluaXNoIiwiX2NhdGNoIiwidGhyb3duIiwiZGVsZWdhdGVZaWVsZCIsImFzeW5jR2VuZXJhdG9yU3RlcCIsImdlbiIsIl9uZXh0IiwiX3Rocm93IiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJhcmdzIiwiYXJndW1lbnRzIiwiYXBwbHkiLCJfZGVmaW5lUHJvcGVydGllcyIsInRhcmdldCIsInByb3BzIiwiZGVzY3JpcHRvciIsIl90b1Byb3BlcnR5S2V5IiwiX2NyZWF0ZUNsYXNzIiwiQ29uc3RydWN0b3IiLCJwcm90b1Byb3BzIiwic3RhdGljUHJvcHMiLCJfY2xhc3NDYWxsQ2hlY2siLCJpbnN0YW5jZSIsIl9kZWZpbmVQcm9wZXJ0eSIsIl90b1ByaW1pdGl2ZSIsIlN0cmluZyIsImlucHV0IiwiaGludCIsInByaW0iLCJ0b1ByaW1pdGl2ZSIsInJlcyIsIk51bWJlciIsIkVORF9QT0lOVFNfQVBJX1JPVVRFIiwiU3R1YiIsImhvc3QiLCJwb3J0IiwidXJsIiwicHJvY2VzcyIsInN0YXJ0U3R1YiIsImNtZCIsImNvbmNhdCIsImpvaW4iLCJsb2dnZXIiLCJkZWJ1ZyIsImphdmFQcm9jZXNzIiwiY2FsbFNwZWNtYXRpYyIsIm1lc3NhZ2UiLCJpbmRleE9mIiwic3R1YkluZm8iLCJzcGxpdCIsIl91cmxJbmZvJGxlbmd0aCIsInRyaW0iLCJ1cmxJbmZvIiwiZXhlYyIsInBhcnNlSW50Iiwic3RvcFN0dWIiLCJfcmVmIiwiX2NhbGxlZSIsInN0dWIiLCJfamF2YVByb2Nlc3Mkc3Rkb3V0IiwiX2phdmFQcm9jZXNzJHN0ZGVyciIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJzdGRvdXQiLCJyZW1vdmVBbGxMaXN0ZW5lcnMiLCJzdGRlcnIiLCJ0ZXJtaW5hdGUiLCJwaWQiLCJfeCIsInRlc3QiLCJjb250cmFjdFBhdGgiLCJlbnYiLCJhcGlFbmRQb2ludFVybCIsInNwZWNzUGF0aCIsInBhdGgiLCJyZXBvcnREaXIiLCJmcyIsInJtU3luYyIsInJlY3Vyc2l2ZSIsImZvcmNlIiwiX3JlamVjdCIsInRlc3RDYXNlcyIsInBhcnNlSnVuaXRYTUwiLCJ0b3RhbCIsImZhaWx1cmUiLCJmaWx0ZXIiLCJ0ZXN0Y2FzZSIsInN1Y2Nlc3MiLCJzaG93VGVzdFJlc3VsdHMiLCJ0ZXN0Rm4iLCJtYXAiLCJuYW1lVGVtcEFyciIsInJlcGxhY2UiLCJza2lwcGVkIiwic2V0RXhwZWN0YXRpb25zIiwic3R1YlBhdGgiLCJzdHViU2VydmVyQmFzZVVybCIsInN0dWJSZXNwb25zZSIsImZldGNoIiwiYm9keSIsIkpTT04iLCJzdHJpbmdpZnkiLCJfcmVmMiIsIl9jYWxsZWUyIiwicmVzcG9uc2UiLCJfY2FsbGVlMiQiLCJfY29udGV4dDIiLCJzdGF0dXMiLCJ0ZXh0IiwiX3gyIiwicHJpbnRKYXJWZXJzaW9uIiwiY29uc29sZSIsImxvZyIsImxpc3RFbmRQb2ludHMiLCJleHByZXNzQXBwIiwiZGV0YWlscyIsImxpc3RFeHByZXNzRW5kcG9pbnRzIiwiZW5kUG9pbnRzIiwiYXBpRGV0YWlsIiwibWV0aG9kcyIsImVuYWJsZUFwaUNvdmVyYWdlIiwiYWRkRW5kUG9pbnRzUm91dGUiLCJyZXBvcnRQYXRoIiwiZGF0YSIsInJlYWRGaWxlU3luYyIsInBhcnNlciIsIlhNTFBhcnNlciIsInJlc3VsdFhtbCIsInBhcnNlIiwidGVzdHN1aXRlIiwiQXJyYXkiLCJpc0FycmF5IiwiZ2V0IiwiX3JlcSIsInNwcmluZ0FjdHVhdG9yUGF5bG9hZCIsImNvbnRleHRzIiwiYXBwbGljYXRpb24iLCJtYXBwaW5ncyIsImRpc3BhdGNoZXJTZXJ2bGV0cyIsImRpc3BhdGNoZXJTZXJ2bGV0Iiwic29ydCIsInJlcXVlc3RNYXBwaW5nQ29uZGl0aW9ucyIsInBhdHRlcm5zIiwic2VuZCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmZXRjaCBmcm9tICdub2RlLWZldGNoJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgQ2hpbGRQcm9jZXNzIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgeyBYTUxQYXJzZXIgfSBmcm9tICdmYXN0LXhtbC1wYXJzZXInO1xuaW1wb3J0IGZzIGZyb20gJ2ZzJztcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi4vY29tbW9uL2xvZ2dlcic7XG5pbXBvcnQgeyBjYWxsU3BlY21hdGljIH0gZnJvbSAnLi4vY29tbW9uL3J1bm5lcic7XG5pbXBvcnQgdGVybWluYXRlIGZyb20gJ3Rlcm1pbmF0ZS9wcm9taXNlJztcbmltcG9ydCBsaXN0RXhwcmVzc0VuZHBvaW50cyBmcm9tICdleHByZXNzLWxpc3QtZW5kcG9pbnRzJztcblxuY29uc3QgRU5EX1BPSU5UU19BUElfUk9VVEUgPSAnX3NwZWNtYXRpYy9lbmRwb2ludHMnO1xuXG5leHBvcnQgY2xhc3MgU3R1YiB7XG4gICAgaG9zdDogc3RyaW5nO1xuICAgIHBvcnQ6IG51bWJlcjtcbiAgICB1cmw6IHN0cmluZztcbiAgICBwcm9jZXNzOiBDaGlsZFByb2Nlc3M7XG4gICAgY29uc3RydWN0b3IoaG9zdDogc3RyaW5nLCBwb3J0OiBudW1iZXIsIHVybDogc3RyaW5nLCBwcm9jZXNzOiBDaGlsZFByb2Nlc3MpIHtcbiAgICAgICAgdGhpcy5ob3N0ID0gaG9zdDtcbiAgICAgICAgdGhpcy5wb3J0ID0gcG9ydDtcbiAgICAgICAgdGhpcy51cmwgPSB1cmw7XG4gICAgICAgIHRoaXMucHJvY2VzcyA9IHByb2Nlc3M7XG4gICAgfVxufVxuXG5jb25zdCBzdGFydFN0dWIgPSAoaG9zdD86IHN0cmluZywgcG9ydD86IG51bWJlciwgYXJncz86IChzdHJpbmcgfCBudW1iZXIpW10pOiBQcm9taXNlPFN0dWI+ID0+IHtcbiAgICB2YXIgY21kID0gYHN0dWJgO1xuICAgIGlmIChob3N0KSBjbWQgKz0gYCAtLWhvc3Q9JHtob3N0fWA7XG4gICAgaWYgKHBvcnQpIGNtZCArPSBgIC0tcG9ydD0ke3BvcnR9YDtcbiAgICBpZiAoYXJncykgY21kICs9ICcgJyArIGFyZ3Muam9pbignICcpO1xuXG4gICAgbG9nZ2VyLmluZm8oJ1N0dWI6IFN0YXJ0aW5nIHNlcnZlcicpO1xuICAgIGxvZ2dlci5kZWJ1ZyhgU3R1YjogRXhlY3V0aW5nIFwiJHtjbWR9XCJgKTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGphdmFQcm9jZXNzID0gY2FsbFNwZWNtYXRpYyhcbiAgICAgICAgICAgIGNtZCxcbiAgICAgICAgICAgIChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGBTdHViOiBFeGl0ZWQgd2l0aCBlcnJvciAke2Vycn1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgKG1lc3NhZ2UsIGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5pbmRleE9mKCdTdHViIHNlcnZlciBpcyBydW5uaW5nJykgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYFN0dWI6ICR7bWVzc2FnZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0dWJJbmZvID0gbWVzc2FnZS5zcGxpdCgnb24nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHViSW5mby5sZW5ndGggPCAyKSByZWplY3QoJ0Nhbm5vdCBkZXRlcm1pbmUgdXJsIGZyb20gc3R1YiBvdXRwdXQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVybCA9IHN0dWJJbmZvWzFdLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cmxJbmZvID0gLyguKj8pOlxcL1xcLyguKj8pOihbMC05XSspLy5leGVjKHVybCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh1cmxJbmZvPy5sZW5ndGggPz8gMCkgPCA0KSByZWplY3QoJ0Nhbm5vdCBkZXRlcm1pbmUgaG9zdCBhbmQgcG9ydCBmcm9tIHN0dWIgb3V0cHV0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSByZXNvbHZlKG5ldyBTdHViKHVybEluZm8hWzJdLCBwYXJzZUludCh1cmxJbmZvIVszXSksIHVybEluZm8hWzBdLCBqYXZhUHJvY2VzcykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1lc3NhZ2UuaW5kZXhPZignQWRkcmVzcyBhbHJlYWR5IGluIHVzZScpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihgU3R1YjogJHttZXNzYWdlfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KCdBZGRyZXNzIGFscmVhZHkgaW4gdXNlJyk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoYFN0dWI6ICR7bWVzc2FnZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihgU3R1YjogJHttZXNzYWdlfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9KTtcbn07XG5cbmNvbnN0IHN0b3BTdHViID0gYXN5bmMgKHN0dWI6IFN0dWIpID0+IHtcbiAgICBsb2dnZXIuZGVidWcoYFN0dWI6IFN0b3BwaW5nIHNlcnZlciBhdCAke3N0dWIudXJsfWApO1xuICAgIGNvbnN0IGphdmFQcm9jZXNzID0gc3R1Yi5wcm9jZXNzO1xuICAgIGphdmFQcm9jZXNzLnN0ZG91dD8ucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgamF2YVByb2Nlc3Muc3RkZXJyPy5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICBqYXZhUHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMoJ2Nsb3NlJyk7XG4gICAgYXdhaXQgdGVybWluYXRlKGphdmFQcm9jZXNzLnBpZCEpO1xuICAgIGxvZ2dlci5pbmZvKGBTdHViOiBTdG9wcGVkIHNlcnZlciBhdCAke3N0dWIudXJsfWApO1xufTtcblxuY29uc3QgdGVzdCA9IChob3N0Pzogc3RyaW5nLCBwb3J0PzogbnVtYmVyLCBjb250cmFjdFBhdGg/OiBzdHJpbmcsIGFyZ3M/OiAoc3RyaW5nIHwgbnVtYmVyKVtdKTogUHJvbWlzZTx7IFtrOiBzdHJpbmddOiBudW1iZXIgfSB8IHVuZGVmaW5lZD4gPT4ge1xuICAgIGlmIChwcm9jZXNzLmVudlsnZW5kcG9pbnRzQVBJJ10pIHtcbiAgICAgICAgY29uc3QgYXBpRW5kUG9pbnRVcmwgPSBob3N0ICYmIHBvcnQgPyBgaHR0cDovLyR7aG9zdH06JHtwb3J0fS8ke0VORF9QT0lOVFNfQVBJX1JPVVRFfWAgOiBgaHR0cDovL2xvY2FsaG9zdDo4MDgwLyR7RU5EX1BPSU5UU19BUElfUk9VVEV9YDtcbiAgICAgICAgcHJvY2Vzcy5lbnZbJ2VuZHBvaW50c0FQSSddID0gYXBpRW5kUG9pbnRVcmw7XG4gICAgfVxuXG4gICAgY29uc3Qgc3BlY3NQYXRoID0gcGF0aC5yZXNvbHZlKGNvbnRyYWN0UGF0aCArICcnKTtcblxuICAgIHZhciBjbWQgPSBgdGVzdGA7XG4gICAgaWYgKGNvbnRyYWN0UGF0aCkgY21kICs9IGAgJHtzcGVjc1BhdGh9YDtcbiAgICBjbWQgKz0gJyAtLWp1bml0UmVwb3J0RGlyPWRpc3QvdGVzdC1yZXBvcnQnO1xuICAgIGlmIChob3N0KSBjbWQgKz0gYCAtLWhvc3Q9JHtob3N0fWA7XG4gICAgaWYgKHBvcnQpIGNtZCArPSBgIC0tcG9ydD0ke3BvcnR9YDtcbiAgICBpZiAoYXJncykgY21kICs9ICcgJyArIGFyZ3Muam9pbignICcpO1xuXG4gICAgbG9nZ2VyLmluZm8oJ1Rlc3Q6IFJ1bm5pbmcnKTtcbiAgICBsb2dnZXIuZGVidWcoYFRlc3Q6IEV4ZWN1dGluZyBcIiR7Y21kfVwiYCk7XG5cbiAgICBjb25zdCByZXBvcnREaXIgPSBwYXRoLnJlc29sdmUoJ2Rpc3QvdGVzdC1yZXBvcnQnKTtcbiAgICBmcy5ybVN5bmMocmVwb3J0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIF9yZWplY3QpID0+IHtcbiAgICAgICAgY2FsbFNwZWNtYXRpYyhcbiAgICAgICAgICAgIGNtZCxcbiAgICAgICAgICAgIChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIGxvZ2dlci5lcnJvcihgVGVzdDogRmFpbGVkIHdpdGggZXJyb3IgJHtlcnJ9YCk7XG4gICAgICAgICAgICAgICAgdmFyIHRlc3RDYXNlcyA9IHBhcnNlSnVuaXRYTUwoKTtcbiAgICAgICAgICAgICAgICBjb25zdCB0b3RhbCA9IHRlc3RDYXNlcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgY29uc3QgZmFpbHVyZSA9IHRlc3RDYXNlcy5maWx0ZXIoKHRlc3RjYXNlOiB7IFtpZDogc3RyaW5nXTogYW55IH0pID0+IHRlc3RjYXNlWydmYWlsdXJlJ10gfHwgdGVzdGNhc2VbJ3NraXBwZWQnXSkubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGNvbnN0IHN1Y2Nlc3MgPSB0b3RhbCAtIGZhaWx1cmU7XG4gICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHsgdG90YWwsIHN1Y2Nlc3MsIGZhaWx1cmUgfTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgKG1lc3NhZ2UsIGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyW2Vycm9yID8gJ2Vycm9yJyA6ICdkZWJ1ZyddKGBUZXN0OiAke21lc3NhZ2V9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfSk7XG59O1xuXG5jb25zdCBzaG93VGVzdFJlc3VsdHMgPSAodGVzdEZuOiAobmFtZTogc3RyaW5nLCBjYjogKCkgPT4gdm9pZCkgPT4gdm9pZCkgPT4ge1xuICAgIHZhciB0ZXN0Q2FzZXMgPSBwYXJzZUp1bml0WE1MKCk7XG4gICAgdGVzdENhc2VzLm1hcChmdW5jdGlvbiAodGVzdGNhc2U6IHsgW2lkOiBzdHJpbmddOiBhbnkgfSkge1xuICAgICAgICB2YXIgbmFtZSA9ICdObyBOYW1lJztcbiAgICAgICAgaWYgKHRlc3RjYXNlWydzeXN0ZW0tb3V0J10pIHtcbiAgICAgICAgICAgIGNvbnN0IG5hbWVUZW1wQXJyID0gdGVzdGNhc2VbJ3N5c3RlbS1vdXQnXVxuICAgICAgICAgICAgICAgIC50cmltKClcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxuL2csICcnKVxuICAgICAgICAgICAgICAgIC5zcGxpdCgvZGlzcGxheS1uYW1lOi4qU2NlbmFyaW86IC8pO1xuICAgICAgICAgICAgaWYgKG5hbWVUZW1wQXJyLmxlbmd0aCA+IDEpIG5hbWUgPSBuYW1lVGVtcEFyclsxXS50cmltKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGVzdEZuKG5hbWUsICgpID0+IHtcbiAgICAgICAgICAgIGlmICh0ZXN0Y2FzZS5mYWlsdXJlIHx8IHRlc3RjYXNlLnNraXBwZWQpIHRocm93IG5ldyBFcnJvcignRGlkIG5vdCBwYXNzJyk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufTtcblxuY29uc3Qgc2V0RXhwZWN0YXRpb25zID0gKHN0dWJQYXRoOiBzdHJpbmcsIHN0dWJTZXJ2ZXJCYXNlVXJsPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgY29uc3Qgc3R1YlJlc3BvbnNlID0gcmVxdWlyZShwYXRoLnJlc29sdmUoc3R1YlBhdGgpKTtcbiAgICBzdHViU2VydmVyQmFzZVVybCA9IHN0dWJTZXJ2ZXJCYXNlVXJsIHx8ICdodHRwOi8vbG9jYWxob3N0OjkwMDAnO1xuXG4gICAgbG9nZ2VyLmluZm8oYFNldCBFeHBlY3RhdGlvbnM6IFN0dWIgdXJsIGlzICR7c3R1YlNlcnZlckJhc2VVcmx9YCk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBmZXRjaChgJHtzdHViU2VydmVyQmFzZVVybH0vX3NwZWNtYXRpYy9leHBlY3RhdGlvbnNgLCB7XG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHN0dWJSZXNwb25zZSksXG4gICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbihhc3luYyByZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPSAyMDApIHtcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGBTZXQgRXhwZWN0YXRpb25zOiBGYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAke3Jlc3BvbnNlLnN0YXR1c31gKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9keSA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGJvZHkpO1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoYFNldHRpbmcgZXhwZWNhdGlvbiBmYWlsZWRgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygnU2V0IEV4cGVjdGF0aW9uczogRmluaXNoZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoYFNldCBFeHBlY3RhdGlvbnM6IEZhaWxlZCB3aXRoIGVycm9yICR7ZXJyfWApO1xuICAgICAgICAgICAgICAgIHJlamVjdChgU2V0dGluZyBleHBlY2F0aW9uIGZhaWxlZCB3aXRoIGVycm9yICR7ZXJyfWApO1xuICAgICAgICAgICAgfSk7XG4gICAgfSk7XG59O1xuXG5jb25zdCBwcmludEphclZlcnNpb24gPSAoKSA9PiB7XG4gICAgY29uc3QgY21kID0gYC0tdmVyc2lvbmA7XG4gICAgbG9nZ2VyLmluZm8oJ1ByaW50IEphciBWZXJzaW9uOiBSdW5uaW5nJyk7XG4gICAgbG9nZ2VyLmRlYnVnKGBQcmludCBKYXIgVmVyc2lvbjogRXhlY3V0aW5nIFwiJHtjbWR9XCJgKTtcblxuICAgIGNhbGxTcGVjbWF0aWMoXG4gICAgICAgIGNtZCxcbiAgICAgICAgKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyKSBsb2dnZXIuZXJyb3IoYFByaW50IEphciBWZXJzaW9uOiBGYWlsZWQgd2l0aCBlcnJvciAke2Vycn1gKTtcbiAgICAgICAgfSxcbiAgICAgICAgKG1lc3NhZ2UsIGVycm9yKSA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyb3IpIGxvZ2dlci5lcnJvcihgUHJpbnQgSmFyIFZlcnNpb246ICR7bWVzc2FnZX1gKTtcbiAgICAgICAgICAgIGVsc2UgY29uc29sZS5sb2coYCR7bWVzc2FnZX1gKTtcbiAgICAgICAgfVxuICAgICk7XG59O1xuXG5jb25zdCBsaXN0RW5kUG9pbnRzID0gKGV4cHJlc3NBcHA6IGFueSk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nW10gfSA9PiB7XG4gICAgY29uc3QgZGV0YWlscyA9IGxpc3RFeHByZXNzRW5kcG9pbnRzKGV4cHJlc3NBcHApO1xuICAgIGxldCBlbmRQb2ludHM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nW10gfSA9IHt9O1xuICAgIGRldGFpbHMubWFwKGFwaURldGFpbCA9PiB7XG4gICAgICAgIGVuZFBvaW50c1thcGlEZXRhaWwucGF0aF0gPSBhcGlEZXRhaWwubWV0aG9kcztcbiAgICB9KTtcbiAgICBkZWxldGUgZW5kUG9pbnRzW2AvJHtFTkRfUE9JTlRTX0FQSV9ST1VURX1gXTtcbiAgICByZXR1cm4gZW5kUG9pbnRzO1xufTtcblxuY29uc3QgZW5hYmxlQXBpQ292ZXJhZ2UgPSAoZXhwcmVzc0FwcDogYW55KSA9PiB7XG4gICAgcHJvY2Vzcy5lbnZbJ2VuZHBvaW50c0FQSSddID0gRU5EX1BPSU5UU19BUElfUk9VVEU7XG4gICAgYWRkRW5kUG9pbnRzUm91dGUoZXhwcmVzc0FwcCk7XG4gICAgbG9nZ2VyLmluZm8oYEVuZHBvaW50cyBBUEkgcmVnaXN0ZXJlZCBhdCAke0VORF9QT0lOVFNfQVBJX1JPVVRFfWApO1xufTtcblxuY29uc3QgcGFyc2VKdW5pdFhNTCA9ICgpID0+IHtcbiAgICBjb25zdCByZXBvcnRQYXRoID0gcGF0aC5yZXNvbHZlKCdkaXN0L3Rlc3QtcmVwb3J0L1RFU1QtanVuaXQtanVwaXRlci54bWwnKTtcbiAgICB2YXIgZGF0YSA9IGZzLnJlYWRGaWxlU3luYyhyZXBvcnRQYXRoKTtcbiAgICBjb25zdCBwYXJzZXIgPSBuZXcgWE1MUGFyc2VyKCk7XG4gICAgdmFyIHJlc3VsdFhtbCA9IHBhcnNlci5wYXJzZShkYXRhKTtcbiAgICByZXN1bHRYbWwudGVzdHN1aXRlLnRlc3RjYXNlID0gQXJyYXkuaXNBcnJheShyZXN1bHRYbWwudGVzdHN1aXRlLnRlc3RjYXNlKSA/IHJlc3VsdFhtbC50ZXN0c3VpdGUudGVzdGNhc2UgOiBbcmVzdWx0WG1sLnRlc3RzdWl0ZS50ZXN0Y2FzZV07XG4gICAgcmV0dXJuIHJlc3VsdFhtbC50ZXN0c3VpdGUudGVzdGNhc2U7XG59O1xuXG5jb25zdCBhZGRFbmRQb2ludHNSb3V0ZSA9IChleHByZXNzQXBwOiBhbnkpID0+IHtcbiAgICBleHByZXNzQXBwLmdldChgLyR7RU5EX1BPSU5UU19BUElfUk9VVEV9YCwgKF9yZXE6IGFueSwgcmVzOiBhbnkpID0+IHtcbiAgICAgICAgbGV0IGVuZFBvaW50cyA9IGxpc3RFbmRQb2ludHMoZXhwcmVzc0FwcCk7XG4gICAgICAgIGxldCBzcHJpbmdBY3R1YXRvclBheWxvYWQgPSB7XG4gICAgICAgICAgICBjb250ZXh0czoge1xuICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgIG1hcHBpbmdzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaGVyU2VydmxldHM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaGVyU2VydmxldDogW10sXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICBPYmplY3Qua2V5cyhlbmRQb2ludHMpLnNvcnQoKS5tYXAocGF0aCA9PiB7XG4gICAgICAgICAgICBzcHJpbmdBY3R1YXRvclBheWxvYWQuY29udGV4dHMuYXBwbGljYXRpb24ubWFwcGluZ3MuZGlzcGF0Y2hlclNlcnZsZXRzLmRpc3BhdGNoZXJTZXJ2bGV0LnB1c2goe1xuICAgICAgICAgICAgICAgIGRldGFpbHM6IHtcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdE1hcHBpbmdDb25kaXRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRob2RzOiBlbmRQb2ludHNbcGF0aF0uc29ydCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybnM6IFtwYXRoXSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSBhcyBuZXZlcik7XG4gICAgICAgIH0pO1xuICAgICAgICByZXMuc2VuZChzcHJpbmdBY3R1YXRvclBheWxvYWQpO1xuICAgIH0pO1xufVxuXG5leHBvcnQgeyBzdGFydFN0dWIsIHN0b3BTdHViLCB0ZXN0LCBzZXRFeHBlY3RhdGlvbnMsIHByaW50SmFyVmVyc2lvbiwgc2hvd1Rlc3RSZXN1bHRzLCBlbmFibGVBcGlDb3ZlcmFnZSB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxVQUFBLEdBQUFDLHNC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
@@ -0,0 +1,2 @@
1
+ export { startStub, stopStub, test, setExpectations, printJarVersion, showTestResults, enableApiCoverage } from './core';
2
+ export { startKafkaStub, stopKafkaStub, verifyKafkaStubMessage, verifyKafkaStub, setKafkaStubExpectations } from './kafka';
package/dist/index.js CHANGED
@@ -76,4 +76,5 @@ Object.defineProperty(exports, "verifyKafkaStubMessage", {
76
76
  }
77
77
  });
78
78
  var _core = require("./core");
79
- var _kafka = require("./kafka");
79
+ var _kafka = require("./kafka");
80
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29yZSIsInJlcXVpcmUiLCJfa2Fma2EiXSwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgc3RhcnRTdHViLCBzdG9wU3R1YiwgdGVzdCwgc2V0RXhwZWN0YXRpb25zLCBwcmludEphclZlcnNpb24sIHNob3dUZXN0UmVzdWx0cywgZW5hYmxlQXBpQ292ZXJhZ2UgfSBmcm9tICcuL2NvcmUnO1xuZXhwb3J0IHsgc3RhcnRLYWZrYVN0dWIsIHN0b3BLYWZrYVN0dWIsIHZlcmlmeUthZmthU3R1Yk1lc3NhZ2UsIHZlcmlmeUthZmthU3R1Yiwgc2V0S2Fma2FTdHViRXhwZWN0YXRpb25zIH0gZnJvbSAnLi9rYWZrYSc7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsSUFBQUEsS0FBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsTUFBQSxHQUFBRCxPQUFBIn0=
@@ -0,0 +1,14 @@
1
+ /// <reference types="node" />
2
+ import { ChildProcess } from 'child_process';
3
+ export declare class KafkaStub {
4
+ port: number;
5
+ apiPort: number;
6
+ process: ChildProcess;
7
+ constructor(port: number, apiPort: number, process: ChildProcess);
8
+ }
9
+ declare const startKafkaStub: (port?: number, args?: (string | number)[]) => Promise<KafkaStub>;
10
+ declare const stopKafkaStub: (stub: KafkaStub) => Promise<void>;
11
+ declare const setKafkaStubExpectations: (stub: KafkaStub, expecations: any) => Promise<void>;
12
+ declare const verifyKafkaStub: (stub: KafkaStub) => Promise<Boolean>;
13
+ declare const verifyKafkaStubMessage: (stub: KafkaStub, topic: string, value: string) => Promise<Boolean>;
14
+ export { startKafkaStub, stopKafkaStub, verifyKafkaStubMessage, verifyKafkaStub, setKafkaStubExpectations };