geteventstore-promise2
Version:
GetEventStore client wrapper using promises
248 lines (211 loc) • 8.76 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _nodeEventstoreClient = _interopRequireDefault(require("node-eventstore-client2"));
var _genericPool = _interopRequireDefault(require("generic-pool"));
var _debug = _interopRequireDefault(require("debug"));
var debug = (0, _debug["default"])('geteventstore:connectionManager');
var _uniqueConfigConnectionPools = [];
var _default = {
create: function () {
var _create = (0, _asyncToGenerator2["default"])(
/*#__PURE__*/
_regenerator["default"].mark(function _callee2(config, onConnected) {
var isSubscription,
connectionPool,
opts,
factory,
_args2 = arguments;
return _regenerator["default"].wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
isSubscription = _args2.length > 2 && _args2[2] !== undefined ? _args2[2] : false;
connectionPool = _uniqueConfigConnectionPools.find(function (pool) {
return pool.config === config && pool.onConnected === onConnected;
});
if (!connectionPool) {
opts = config.poolOptions || {
autostart: false
};
if (isSubscription) {
opts.min = 1;
opts.max = 1;
}
factory = {
create: function () {
var _create2 = (0, _asyncToGenerator2["default"])(
/*#__PURE__*/
_regenerator["default"].mark(function _callee() {
var client;
return _regenerator["default"].wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_context.next = 2;
return _nodeEventstoreClient["default"].EventStoreConnection.create(config, config.gossipSeeds || "".concat(config.protocol, "://").concat(config.hostname, ":").concat(config.port));
case 2:
client = _context.sent;
client.releaseConnection = function () {
return connectionPool.pool.release(client);
};
if (onConnected) {
client.once('connected', onConnected);
} else {
client.on('connected', function () {
return debug('', "".concat(client._connectionName, " - Connection Connected"));
});
}
client.on('disconnected', function () {
return debug('', "".concat(client._connectionName, " - Connection Disconnected"));
});
client.on('reconnecting', function () {
return debug('', "".concat(client._connectionName, " - Connection Reconnecting..."));
});
client.on('closed', function (reason) {
debug('', "".concat(client._connectionName, " - Connection Closed: ").concat(reason));
factory.destroy(client);
});
client.on('error', function (err) {
debug('', "".concat(client._connectionName, " - Connection Error: ").concat(err.stack));
console.error("".concat(client._connectionName, " - EventStore: ").concat(err.stack));
try {
factory.destroy(client);
} catch (ex) {//Do nothing
}
});
_context.next = 11;
return client.connect();
case 11:
return _context.abrupt("return", client);
case 12:
case "end":
return _context.stop();
}
}
}, _callee);
}));
function create() {
return _create2.apply(this, arguments);
}
return create;
}(),
destroy: function destroy(client) {
return client.close();
}
};
connectionPool = {
config: config,
onConnected: onConnected,
pool: _genericPool["default"].createPool(factory, opts)
};
_uniqueConfigConnectionPools.push(connectionPool);
}
return _context2.abrupt("return", connectionPool.pool.acquire());
case 4:
case "end":
return _context2.stop();
}
}
}, _callee2);
}));
function create(_x, _x2) {
return _create.apply(this, arguments);
}
return create;
}(),
closeAllPools: function () {
var _closeAllPools = (0, _asyncToGenerator2["default"])(
/*#__PURE__*/
_regenerator["default"].mark(function _callee3() {
return _regenerator["default"].wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
_context3.next = 2;
return Promise.all(_uniqueConfigConnectionPools.map(function (connectionPool) {
return connectionPool.pool.clear();
}));
case 2:
_uniqueConfigConnectionPools.splice(0, _uniqueConfigConnectionPools.length);
case 3:
case "end":
return _context3.stop();
}
}
}, _callee3);
}));
function closeAllPools() {
return _closeAllPools.apply(this, arguments);
}
return closeAllPools;
}(),
close: function close(config) {
var _this = this;
return (
/*#__PURE__*/
(0, _asyncToGenerator2["default"])(
/*#__PURE__*/
_regenerator["default"].mark(function _callee4() {
var pool;
return _regenerator["default"].wrap(function _callee4$(_context4) {
while (1) {
switch (_context4.prev = _context4.next) {
case 0:
_context4.next = 2;
return _this.getPool(config)();
case 2:
pool = _context4.sent;
_context4.next = 5;
return pool.clear();
case 5:
_uniqueConfigConnectionPools = _uniqueConfigConnectionPools.filter(function (_connectionPool) {
return _connectionPool.pool !== pool;
});
case 6:
case "end":
return _context4.stop();
}
}
}, _callee4);
}))
);
},
getPool: function getPool(config) {
return (
/*#__PURE__*/
(0, _asyncToGenerator2["default"])(
/*#__PURE__*/
_regenerator["default"].mark(function _callee5() {
var connectionPool;
return _regenerator["default"].wrap(function _callee5$(_context5) {
while (1) {
switch (_context5.prev = _context5.next) {
case 0:
connectionPool = _uniqueConfigConnectionPools.find(function (pool) {
return pool.config === config;
});
if (connectionPool) {
_context5.next = 3;
break;
}
throw new Error("Connection Pool not found");
case 3:
return _context5.abrupt("return", connectionPool.pool);
case 4:
case "end":
return _context5.stop();
}
}
}, _callee5);
}))
);
}
};
exports["default"] = _default;
module.exports = exports.default;