tailwind
Version:
tailwind is a base module for streaming and evented CQS applications.
177 lines (145 loc) • 5.47 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var hase = require('hase'),
retry = require('async-retry');
var Receiver =
/*#__PURE__*/
function () {
function Receiver(_ref) {
var url = _ref.url,
application = _ref.application,
prefetch = _ref.prefetch;
(0, _classCallCheck2.default)(this, Receiver);
if (!url) {
throw new Error('Url is missing.');
}
if (!application) {
throw new Error('Application is missing.');
}
this.url = url;
this.application = application;
this.prefetch = prefetch;
}
(0, _createClass2.default)(Receiver, [{
key: "link",
value: function () {
var _link = (0, _asyncToGenerator2.default)(
/*#__PURE__*/
_regenerator.default.mark(function _callee2(app, incoming, outgoing) {
var _this = this;
var logger, mq, readStream;
return _regenerator.default.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
if (app) {
_context2.next = 2;
break;
}
throw new Error('App is missing.');
case 2:
if (incoming) {
_context2.next = 4;
break;
}
throw new Error('Incoming is missing.');
case 4:
if (outgoing) {
_context2.next = 6;
break;
}
throw new Error('Outgoing is missing.');
case 6:
logger = app.services.getLogger();
_context2.prev = 7;
_context2.next = 10;
return retry(
/*#__PURE__*/
(0, _asyncToGenerator2.default)(
/*#__PURE__*/
_regenerator.default.mark(function _callee() {
var url, prefetch, connection;
return _regenerator.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
url = _this.url, prefetch = _this.prefetch;
_context.next = 3;
return hase.connect({
url: url,
prefetch: prefetch
});
case 3:
connection = _context.sent;
return _context.abrupt("return", connection);
case 5:
case "end":
return _context.stop();
}
}
}, _callee);
})));
case 10:
mq = _context2.sent;
_context2.next = 16;
break;
case 13:
_context2.prev = 13;
_context2.t0 = _context2["catch"](7);
return _context2.abrupt("return", incoming.emit('error', _context2.t0));
case 16:
mq.on('error', function (err) {
incoming.emit('error', err);
});
mq.on('disconnect', function () {
incoming.emit('disconnect');
});
_context2.prev = 18;
_context2.next = 21;
return mq.worker("".concat(this.application, "::commands")).createReadStream();
case 21:
readStream = _context2.sent;
_context2.next = 27;
break;
case 24:
_context2.prev = 24;
_context2.t1 = _context2["catch"](18);
return _context2.abrupt("return", incoming.emit('error', _context2.t1));
case 27:
logger.debug('Started commandbus (receiver) endpoint.', {
url: this.url,
application: this.application
});
readStream.on('data', function (message) {
var command;
try {
command = app.Command.wrap(message.payload);
} catch (ex) {
logger.warn('Discarding command...', command);
return message.discard();
}
command.next = message.next;
command.discard = message.discard;
command.defer = message.defer;
incoming.write(command);
});
case 29:
case "end":
return _context2.stop();
}
}
}, _callee2, this, [[7, 13], [18, 24]]);
}));
function link(_x, _x2, _x3) {
return _link.apply(this, arguments);
}
return link;
}()
}]);
return Receiver;
}();
module.exports = Receiver;
;