emitter-pubsub-broker
Advanced tools
Comparing version 0.1.0 to 0.2.0
@@ -5,2 +5,12 @@ # Change Log | ||
<a name="0.2.0"></a> | ||
# [0.2.0](https://github.com/an-sh/emitter-pubsub-broker/compare/v0.1.0...v0.2.0) (2016-10-09) | ||
### Features | ||
* safely propagate connector error events ([82d57c3](https://github.com/an-sh/emitter-pubsub-broker/commit/82d57c3)) | ||
<a name="0.1.0"></a> | ||
@@ -7,0 +17,0 @@ # 0.1.0 (2016-10-04) |
@@ -45,3 +45,3 @@ 'use strict'; | ||
var _require = require('events'); | ||
var _require = require('eventemitter3'); | ||
@@ -54,2 +54,3 @@ var EventEmitter = _require.EventEmitter; | ||
* @interface Connector | ||
* @extends EventEmitter | ||
*/ | ||
@@ -100,2 +101,10 @@ | ||
/** | ||
* Event will be listened by {@link EmitterPubsubBroker} instance. | ||
* | ||
* @event error | ||
* @memberOf Connector | ||
* @param {Error} error Error. | ||
*/ | ||
var RedisConnector = function (_EventEmitter) { | ||
@@ -113,2 +122,4 @@ (0, _inherits3.default)(RedisConnector, _EventEmitter); | ||
_this.sub.on('messageBuffer', _this._onMessage.bind(_this)); | ||
_this.sub.on('error', _this.emit.bind(_this)); | ||
_this.pub.on('error', _this.emit.bind(_this)); | ||
return _this; | ||
@@ -193,4 +204,10 @@ } | ||
/** | ||
* @extends EventEmitter | ||
*/ | ||
var EmitterPubsubBroker = function () { | ||
var EmitterPubsubBroker = function (_EventEmitter3) { | ||
(0, _inherits3.default)(EmitterPubsubBroker, _EventEmitter3); | ||
/** | ||
@@ -206,17 +223,28 @@ * Creates a broker. | ||
var _this4 = (0, _possibleConstructorReturn3.default)(this, (EmitterPubsubBroker.__proto__ || (0, _getPrototypeOf2.default)(EmitterPubsubBroker)).call(this)); | ||
if (typeof options === 'string') { | ||
options = { connect: options }; | ||
} | ||
this.prefix = options.prefix || 'emitter-pubsub-broker:'; | ||
this.includeChannel = options.includeChannel; | ||
this.clientChannels = new _map2.default(); | ||
this.channelClients = new _map2.default(); | ||
_this4.prefix = options.prefix || 'emitter-pubsub-broker:'; | ||
_this4.includeChannel = options.includeChannel; | ||
_this4.clientChannels = new _map2.default(); | ||
_this4.channelClients = new _map2.default(); | ||
if (options.connect || options.connector) { | ||
this.connector = options.connector || new RedisConnector(options.connect); | ||
this.serialize = true; | ||
_this4.connector = options.connector || new RedisConnector(options.connect); | ||
_this4.serialize = true; | ||
} else { | ||
this.connector = new MemoryConnector(); | ||
this.serialize = false; | ||
_this4.connector = new MemoryConnector(); | ||
_this4.serialize = false; | ||
} | ||
this.connector.on('message', this._dispatch.bind(this)); | ||
_this4.connector.on('message', _this4._dispatch.bind(_this4)); | ||
/** | ||
* Connector error. Does not throw if there are no listeners. | ||
* | ||
* @event error | ||
* @memberOf EmitterPubsubBroker | ||
* @param {Error} error Error. | ||
*/ | ||
_this4.connector.on('error', _this4.emit.bind(_this4)); | ||
return _this4; | ||
} | ||
@@ -462,5 +490,5 @@ | ||
return EmitterPubsubBroker; | ||
}(); | ||
}(EventEmitter); | ||
module.exports = EmitterPubsubBroker; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9FbWl0dGVyUHVic3ViQnJva2VyLmpzIl0sIm5hbWVzIjpbIlByb21pc2UiLCJyZXF1aXJlIiwiUmVkaXMiLCJtc2dwYWNrIiwiRXZlbnRFbWl0dGVyIiwiUmVkaXNDb25uZWN0b3IiLCJvcHRpb25zIiwicHViIiwic3ViIiwic3Vic2NyaWJlIiwiY2F0Y2hSZXR1cm4iLCJvbiIsIl9vbk1lc3NhZ2UiLCJiaW5kIiwiYnVmIiwiZGF0YSIsImNoIiwidG9TdHJpbmciLCJlbWl0IiwicHVibGlzaCIsInVuc3Vic2NyaWJlIiwiYWxsIiwicXVpdCIsIk1lbW9yeUNvbm5lY3RvciIsInJlc29sdmUiLCJ0aGVuIiwiRW1pdHRlclB1YnN1YkJyb2tlciIsImNvbm5lY3QiLCJwcmVmaXgiLCJpbmNsdWRlQ2hhbm5lbCIsImNsaWVudENoYW5uZWxzIiwiY2hhbm5lbENsaWVudHMiLCJjb25uZWN0b3IiLCJzZXJpYWxpemUiLCJfZGlzcGF0Y2giLCJjbGllbnQiLCJjbGllbnRzIiwiZ2V0Iiwic2V0IiwiYWRkIiwibmNsaWVudHMiLCJkZWxldGUiLCJzaXplIiwibXNnIiwiZW5jb2RlIiwiY2hhbm5lbCIsImNoYW5uZWxzIiwiX2NoYW5uZWxBZGRDbGllbnQiLCJfY2hhbm5lbFJlbW92ZUNsaWVudCIsImVhY2giLCJuYW1lIiwiYXJncyIsIl9tYWtlTWVzc2FnZSIsInNlbmRlciIsImlkIiwicmVzIiwicGxlbiIsImxlbmd0aCIsInB1c2giLCJzbGljZSIsImNsZWFyIiwiY2xvc2UiLCJtZXNzYWdlIiwiZGVjb2RlIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxJQUFNQSxVQUFVQyxRQUFRLFVBQVIsQ0FBaEI7QUFDQSxJQUFNQyxRQUFRRCxRQUFRLFNBQVIsQ0FBZDtBQUNBLElBQU1FLFVBQVVGLFFBQVEsY0FBUixDQUFoQjs7ZUFDeUJBLFFBQVEsUUFB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QW9CNkIsS0FBcEI7QUFDQSxXQUFLOUIsY0FBTCxDQUFvQjhCLEtBQXBCO0FBQ0EsYUFBTyxLQUFLNUIsU0FBTCxDQUFlNkIsS0FBZixFQUFQO0FBQ0Q7Ozs4QkFFVTdDLEUsRUFBSUQsSSxFQUFNO0FBQ25CLFVBQUk4QixVQUFVN0IsR0FBRzJDLEtBQUgsQ0FBUyxLQUFLL0IsTUFBTCxDQUFZNkIsTUFBckIsQ0FBZDtBQUNBLFVBQUlLLFVBQVUsS0FBSzdCLFNBQUwsR0FBaUI5QixRQUFRNEQsTUFBUixDQUFlaEQsSUFBZixDQUFqQixHQUF3Q0EsSUFBdEQ7QUFDQSxVQUFJcUIsVUFBVSxLQUFLTCxjQUFMLENBQW9CTSxHQUFwQixDQUF3QnJCLEVBQXhCLENBQWQ7QUFDQTtBQUNBLFVBQUlvQixPQUFKLEVBQWE7QUFDWCxZQUFJZSxhQUFKO0FBQ0EsWUFBSSxLQUFLdEIsY0FBVCxFQUF5QjtBQUN2QnNCLGtCQUFRVyxRQUFRWixJQUFoQixFQUFzQkwsT0FBdEIsMENBQWtDaUIsUUFBUVgsSUFBMUM7QUFDRCxTQUZELE1BRU87QUFDTEEsa0JBQVFXLFFBQVFaLElBQWhCLDBDQUF5QlksUUFBUVgsSUFBakM7QUFDRDtBQU5VO0FBQUE7QUFBQTs7QUFBQTtBQU9YLDJEQUFtQmYsT0FBbkIsaUhBQTRCO0FBQUEsZ0JBQW5CRCxNQUFtQjs7QUFDMUIsZ0JBQUksQ0FBQzJCLFFBQVFULE1BQVQsSUFBbUJsQixPQUFPbUIsRUFBUCxLQUFjUSxRQUFRVCxNQUE3QyxFQUFxRDtBQUNuRGxCLHFCQUFPakIsSUFBUCxnREFBZWlDLElBQWY7QUFDRDtBQUNGO0FBWFU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVlaO0FBQ0Y7Ozs7O0FBSUhhLE9BQU9DLE9BQVAsR0FBaUJ2QyxtQkFBakIiLCJmaWxlIjoiRW1pdHRlclB1YnN1YkJyb2tlci5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBQcm9taXNlID0gcmVxdWlyZSgnYmx1ZWJpcmQnKVxuY29uc3QgUmVkaXMgPSByZXF1aXJlKCdpb3JlZGlzJylcbmNvbnN0IG1zZ3BhY2sgPSByZXF1aXJlKCdtc2dwYWNrLWxpdGUnKVxuY29uc3QgeyBFdmVudEVtaXR0ZXIgfSA9IHJlcXVpcmUoJ2V2ZW50cycpXG5cbi8qKlxuICogSW50ZXJmYWNlIGZvciBjb25uZWN0b3IgaW1wbGVtZW50YXRpb25zLlxuICpcbiAqIEBpbnRlcmZhY2UgQ29ubmVjdG9yXG4gKi9cblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAaW5zdGFuY2VcbiAqIEBuYW1lIHB1Ymxpc2hcbiAqIEBtZW1iZXJPZiBDb25uZWN0b3JcbiAqIEBwYXJhbSB7c3RyaW5nfSBjaGFubmVsIENoYW5uZWwuXG4gKiBAcGFyYW0ge0J1ZmZlcn0gZGF0YSBEYXRhLlxuICogQHJldHVybiB7UHJvbWlzZTx1bmRlZmluZWQ+fVxuICovXG5cbi8qKlxuICogQG1ldGhvZFxuICogQGluc3RhbmNlXG4gKiBAbmFtZSBzdWJzY3JpYmVcbiAqIEBtZW1iZXJPZiBDb25uZWN0b3JcbiAqIEBwYXJhbSB7c3RyaW5nfSBjaGFubmVsIENoYW5uZWwuXG4gKiBAcmV0dXJuIHtQcm9taXNlPHVuZGVmaW5lZD59XG4gKi9cblxuLyoqXG4gKiBAbWV0aG9kXG4gKiBAaW5zdGFuY2VcbiAqIEBuYW1lIHVuc3Vic2NyaWJlXG4gKiBAbWVtYmVyT2YgQ29ubmVjdG9yXG4gKiBAcGFyYW0ge3N0cmluZ30gY2hhbm5lbCBDaGFubmVsLlxuICogQHJldHVybiB7UHJvbWlzZTx1bmRlZmluZWQ+fVxuICovXG5cbi8qKlxuICogQG1ldGhvZFxuICogQGluc3RhbmNlXG4gKiBAbmFtZSBjbG9zZVxuICogQG1lbWJlck9mIENvbm5lY3RvclxuICogQHJldHVybiB7UHJvbWlzZTx1bmRlZmluZWQ+fVxuICovXG5cbi8qKlxuICogQGV2ZW50IG1lc3NhZ2VcbiAqIEBtZW1iZXJPZiBDb25uZWN0b3JcbiAqIEBwYXJhbSB7c3RyaW5nfSBldmVudCBFdmVudCBuYW1lLlxuICogQHBhcmFtIHtCdWZmZXJ9IGRhdGEgRXZlbnQgZGF0YS5cbiAqL1xuXG5jbGFzcyBSZWRpc0Nvbm5lY3RvciBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gIGNvbnN0cnVjdG9yIChvcHRpb25zKSB7XG4gICAgc3VwZXIoKVxuICAgIHRoaXMucHViID0gbmV3IFJlZGlzKG9wdGlvbnMpXG4gICAgdGhpcy5zdWIgPSBuZXcgUmVkaXMob3B0aW9ucylcbiAgICB0aGlzLnN1Yi5zdWJzY3JpYmUoKS5jYXRjaFJldHVybigpXG4gICAgdGhpcy5zdWIub24oJ21lc3NhZ2VCdWZmZXInLCB0aGlzLl9vbk1lc3NhZ2UuYmluZCh0aGlzKSlcbiAgfVxuXG4gIF9vbk1lc3NhZ2UgKGJ1ZiwgZGF0YSkge1xuICAgIGxldCBjaCA9IGJ1Zi50b1N0cmluZygpXG4gICAgdGhpcy5lbWl0KCdtZXNzYWdlJywgY2gsIGRhdGEpXG4gIH1cblxuICBwdWJsaXNoIChjaCwgZGF0YSkge1xuICAgIHJldHVybiB0aGlzLnB1Yi5wdWJsaXNoKGNoLCBkYXRhKVxuICB9XG5cbiAgc3Vic2NyaWJlIChjaCkge1xuICAgIHJldHVybiB0aGlzLnN1Yi5zdWJzY3JpYmUoY2gpXG4gIH1cblxuICB1bnN1YnNjcmliZSAoY2gpIHtcbiAgICByZXR1cm4gdGhpcy5zdWIudW5zdWJzY3JpYmUoY2gpXG4gIH1cblxuICBjbG9zZSAoKSB7XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKFt0aGlzLnB1Yi5xdWl0KCksIHRoaXMuc3ViLnF1aXQoKV0pXG4gIH1cbn1cblxuY2xhc3MgTWVtb3J5Q29ubmVjdG9yIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgY29uc3RydWN0b3IgKG9wdGlvbnMpIHtcbiAgICBzdXBlcigpXG4gIH1cblxuICBwdWJsaXNoIChjaCwgZGF0YSkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgLnRoZW4oKCkgPT4gdGhpcy5lbWl0KCdtZXNzYWdlJywgY2gsIGRhdGEpKVxuICB9XG5cbiAgc3Vic2NyaWJlIChjaCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICB9XG5cbiAgdW5zdWJzY3JpYmUgKGNoKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gIH1cblxuICBjbG9zZSAoKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gIH1cbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBFbWl0dGVyUHVic3ViQnJva2VyLk9wdGlvbnNcbiAqXG4gKiBAcHJvcGVydHkge3N0cmluZ30gY29ubmVjdCBDb25uZWN0IHN0cmluZy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbcHJlZml4PSdlbWl0dGVyLXB1YnN1Yi1icm9rZXI6J10gUHJlZml4LlxuICogQHByb3BlcnR5IHtib29sZWFufSBbaW5jbHVkZUNoYW5uZWw9ZmFsc2VdIEluY2x1ZGUgY2hhbm5lbCBhcyB0aGVcbiAqIGZpcnN0IGFyZ3VtZW50LlxuICogQHByb3BlcnR5IHtDb25uZWN0b3J9IFtjb25uZWN0b3JdIEN1c3RvbSBjb25uZWN0b3IgaW1wbGVtZW50YXRpb24uXG4gKi9cbmNsYXNzIEVtaXR0ZXJQdWJzdWJCcm9rZXIge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIGJyb2tlci5cbiAgICpcbiAgICogQHBhcmFtIHtFbWl0dGVyUHVic3ViQnJva2VyLk9wdGlvbnN8c3RyaW5nfSBvcHRpb25zIE9wdGlvbnMgb3IgYVxuICAgKiBjb25uZWN0IGlmIGEgc3RyaW5nLiBJZiBjb25uZWN0IHN0cmluZyBpcyBlbXB0eSwgdGhlbiBhblxuICAgKiBpbi1tZW1vcnkgY29ubmVjdG9yIGlzIHVzZWQuXG4gICAqL1xuICBjb25zdHJ1Y3RvciAob3B0aW9ucykge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG9wdGlvbnMgPSB7IGNvbm5lY3Q6IG9wdGlvbnMgfVxuICAgIH1cbiAgICB0aGlzLnByZWZpeCA9IG9wdGlvbnMucHJlZml4IHx8ICdlbWl0dGVyLXB1YnN1Yi1icm9rZXI6J1xuICAgIHRoaXMuaW5jbHVkZUNoYW5uZWwgPSBvcHRpb25zLmluY2x1ZGVDaGFubmVsXG4gICAgdGhpcy5jbGllbnRDaGFubmVscyA9IG5ldyBNYXAoKVxuICAgIHRoaXMuY2hhbm5lbENsaWVudHMgPSBuZXcgTWFwKClcbiAgICBpZiAob3B0aW9ucy5jb25uZWN0IHx8IG9wdGlvbnMuY29ubmVjdG9yKSB7XG4gICAgICB0aGlzLmNvbm5lY3RvciA9IG9wdGlvbnMuY29ubmVjdG9yIHx8IG5ldyBSZWRpc0Nvbm5lY3RvcihvcHRpb25zLmNvbm5lY3QpXG4gICAgICB0aGlzLnNlcmlhbGl6ZSA9IHRydWVcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb25uZWN0b3IgPSBuZXcgTWVtb3J5Q29ubmVjdG9yKClcbiAgICAgIHRoaXMuc2VyaWFsaXplID0gZmFsc2VcbiAgICB9XG4gICAgdGhpcy5jb25uZWN0b3Iub24oJ21lc3NhZ2UnLCB0aGlzLl9kaXNwYXRjaC5iaW5kKHRoaXMpKVxuICB9XG5cbiAgX2NoYW5uZWxBZGRDbGllbnQgKGNsaWVudCwgY2gpIHtcbiAgICBsZXQgY2xpZW50cyA9IHRoaXMuY2hhbm5lbENsaWVudHMuZ2V0KGNoKVxuICAgIGlmIChjbGllbnRzID09IG51bGwpIHtcbiAgICAgIGNsaWVudHMgPSBuZXcgU2V0KClcbiAgICAgIHRoaXMuY2hhbm5lbENsaWVudHMuc2V0KGNoLCBjbGllbnRzKVxuICAgICAgY2xpZW50cy5hZGQoY2xpZW50KVxuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLnN1YnNjcmliZShjaClcbiAgICB9IGVsc2Uge1xuICAgICAgY2xpZW50cy5hZGQoY2xpZW50KVxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgfVxuICB9XG5cbiAgX2NoYW5uZWxSZW1vdmVDbGllbnQgKGNsaWVudCwgY2gpIHtcbiAgICBsZXQgY2xpZW50cyA9IHRoaXMuY2hhbm5lbENsaWVudHMuZ2V0KGNoKVxuICAgIGxldCBuY2xpZW50c1xuICAgIGlmIChjbGllbnRzICE9IG51bGwpIHtcbiAgICAgIGNsaWVudHMuZGVsZXRlKGNsaWVudClcbiAgICAgIG5jbGllbnRzID0gY2xpZW50cy5zaXplXG4gICAgfVxuICAgIGlmIChuY2xpZW50cyA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLnVuc3Vic2NyaWJlKGNoKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICB9XG4gIH1cblxuICBfbWFrZU1lc3NhZ2UgKG1zZykge1xuICAgIHJldHVybiB0aGlzLnNlcmlhbGl6ZSA/IG1zZ3BhY2suZW5jb2RlKG1zZykgOiBtc2dcbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJzY3JpYmVzIGVtaXR0ZXIgdG8gYSBjaGFubmVsLlxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50RW1pdHRlcn0gY2xpZW50IEVtaXR0ZXIuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjaGFubmVsIENoYW5uZWwuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8dW5kZWZpbmVkPn1cbiAgICovXG4gIHN1YnNjcmliZSAoY2xpZW50LCBjaGFubmVsKSB7XG4gICAgbGV0IGNoYW5uZWxzID0gdGhpcy5jbGllbnRDaGFubmVscy5nZXQoY2xpZW50KVxuICAgIGlmICghY2hhbm5lbHMpIHtcbiAgICAgIGNoYW5uZWxzID0gbmV3IFNldCgpXG4gICAgICB0aGlzLmNsaWVudENoYW5uZWxzLnNldChjbGllbnQsIGNoYW5uZWxzKVxuICAgIH1cbiAgICBsZXQgY2ggPSB0aGlzLnByZWZpeCArIGNoYW5uZWxcbiAgICBjaGFubmVscy5hZGQoY2gpXG4gICAgcmV0dXJuIHRoaXMuX2NoYW5uZWxBZGRDbGllbnQoY2xpZW50LCBjaClcbiAgfVxuXG4gIC8qKlxuICAgKiBVbnN1YnNjcmliZXMgZW1pdHRlciBmcm9tIGEgY2hhbm5lbC5cbiAgICpcbiAgICogQHBhcmFtIHtFdmVudEVtaXR0ZXJ9IGNsaWVudCBFbWl0dGVyLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2hhbm5lbCBDaGFubmVsLlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPHVuZGVmaW5lZD59XG4gICAqL1xuICB1bnN1YnNjcmliZSAoY2xpZW50LCBjaGFubmVsKSB7XG4gICAgbGV0IGNoYW5uZWxzID0gdGhpcy5jbGllbnRDaGFubmVscy5nZXQoY2xpZW50KVxuICAgIGxldCBjaCA9IHRoaXMucHJlZml4ICsgY2hhbm5lbFxuICAgIGlmIChjaGFubmVscykge1xuICAgICAgY2hhbm5lbHMuZGVsZXRlKGNoKVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fY2hhbm5lbFJlbW92ZUNsaWVudChjbGllbnQsIGNoKVxuICB9XG5cbiAgLyoqXG4gICAqIFVuc3Vic2NyaWJlcyBlbWl0dGVyIGZyb20gYWxsIGNoYW5uZWwuXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnRFbWl0dGVyfSBjbGllbnQgRW1pdHRlci5cbiAgICogQHJldHVybiB7UHJvbWlzZTx1bmRlZmluZWQ+fVxuICAgKi9cbiAgdW5zdWJzY3JpYmVhbGwgKGNsaWVudCkge1xuICAgIGxldCBjaGFubmVscyA9IHRoaXMuY2xpZW50Q2hhbm5lbHMuZ2V0KGNsaWVudClcbiAgICB0aGlzLmNsaWVudENoYW5uZWxzLmRlbGV0ZShjbGllbnQpXG4gICAgaWYgKGNoYW5uZWxzKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5lYWNoKFxuICAgICAgICBjaGFubmVscywgdGhpcy5fY2hhbm5lbFJlbW92ZUNsaWVudC5iaW5kKHRoaXMsIGNsaWVudCkpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQdWJsaXNoIGFuIGV2ZW50IHRvIGEgY2hhbm5lbC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNoYW5uZWwgQ2hhbm5lbC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgRXZlbnQgbmFtZS5cbiAgICogQHBhcmFtIHsqfSBhcmdzIEFyZ3VtZW50cy5cbiAgICogQHJldHVybiB7UHJvbWlzZTx1bmRlZmluZWQ+fVxuICAgKi9cbiAgcHVibGlzaCAoY2hhbm5lbCwgbmFtZSwgLi4uYXJncykge1xuICAgIGxldCBjaCA9IHRoaXMucHJlZml4ICsgY2hhbm5lbFxuICAgIGxldCBtc2cgPSB0aGlzLl9tYWtlTWVzc2FnZSh7bmFtZSwgYXJnc30pXG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLnB1Ymxpc2goY2gsIG1zZylcbiAgfVxuXG4gIC8qKlxuICAgKiBQdWJsaXNoIGFuIGV2ZW50IHRvIGEgY2hhbm5lbCwgZXhjbHVkaW5nIHRoZSBzZW5kZXIuIFRoZSBjbGllbnRcbiAgICogb2JqZWN0IF9fTVVTVF9fIGhhdmUgYW4gdW5pcXVlIGBpZGAgZmllbGQuXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnRFbWl0dGVyfSBjbGllbnQgRW1pdHRlci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNoYW5uZWwgQ2hhbm5lbC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgRXZlbnQgbmFtZS5cbiAgICogQHBhcmFtIHsqfSBhcmdzIEFyZ3VtZW50cy5cbiAgICogQHJldHVybiB7UHJvbWlzZTx1bmRlZmluZWQ+fVxuICAgKi9cbiAgc2VuZCAoY2xpZW50LCBjaGFubmVsLCBuYW1lLCAuLi5hcmdzKSB7XG4gICAgbGV0IGNoID0gdGhpcy5wcmVmaXggKyBjaGFubmVsXG4gICAgbGV0IHNlbmRlciA9IGNsaWVudC5pZFxuICAgIGxldCBtc2cgPSB0aGlzLl9tYWtlTWVzc2FnZSh7c2VuZGVyLCBuYW1lLCBhcmdzfSlcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IucHVibGlzaChjaCwgbXNnKVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgY2xpZW50IHN1YnNjcmlwdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnRFbWl0dGVyfSBjbGllbnQgRW1pdHRlci5cbiAgICogQHJldHVybiB7QXJyYXk8c3RyaW5nPn1cbiAgICovXG4gIGdldFN1YnNjcmlwdGlvbnMgKGNsaWVudCkge1xuICAgIGxldCBjaGFubmVscyA9IHRoaXMuY2xpZW50Q2hhbm5lbHMuZ2V0KGNsaWVudClcbiAgICBsZXQgcmVzID0gW11cbiAgICBpZiAoY2hhbm5lbHMpIHtcbiAgICAgIGxldCBwbGVuID0gdGhpcy5wcmVmaXgubGVuZ3RoXG4gICAgICBmb3IgKGxldCBjaGFubmVsIG9mIGNoYW5uZWxzKSB7XG4gICAgICAgIHJlcy5wdXNoKGNoYW5uZWwuc2xpY2UocGxlbikpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXNcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZXMgYnJva2VyLlxuICAgKlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPHVuZGVmaW5lZD59XG4gICAqL1xuICBjbG9zZSAoKSB7XG4gICAgdGhpcy5jaGFubmVsQ2xpZW50cy5jbGVhcigpXG4gICAgdGhpcy5jbGllbnRDaGFubmVscy5jbGVhcigpXG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmNsb3NlKClcbiAgfVxuXG4gIF9kaXNwYXRjaCAoY2gsIGRhdGEpIHtcbiAgICBsZXQgY2hhbm5lbCA9IGNoLnNsaWNlKHRoaXMucHJlZml4Lmxlbmd0aClcbiAgICBsZXQgbWVzc2FnZSA9IHRoaXMuc2VyaWFsaXplID8gbXNncGFjay5kZWNvZGUoZGF0YSkgOiBkYXRhXG4gICAgbGV0IGNsaWVudHMgPSB0aGlzLmNoYW5uZWxDbGllbnRzLmdldChjaClcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChjbGllbnRzKSB7XG4gICAgICBsZXQgYXJnc1xuICAgICAgaWYgKHRoaXMuaW5jbHVkZUNoYW5uZWwpIHtcbiAgICAgICAgYXJncyA9IFttZXNzYWdlLm5hbWUsIGNoYW5uZWwsIC4uLm1lc3NhZ2UuYXJnc11cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFyZ3MgPSBbbWVzc2FnZS5uYW1lLCAuLi5tZXNzYWdlLmFyZ3NdXG4gICAgICB9XG4gICAgICBmb3IgKGxldCBjbGllbnQgb2YgY2xpZW50cykge1xuICAgICAgICBpZiAoIW1lc3NhZ2Uuc2VuZGVyIHx8IGNsaWVudC5pZCAhPT0gbWVzc2FnZS5zZW5kZXIpIHtcbiAgICAgICAgICBjbGllbnQuZW1pdCguLi5hcmdzKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBFbWl0dGVyUHVic3ViQnJva2VyXG4iXX0= | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9FbWl0dGVyUHVic3ViQnJva2VyLmpzIl0sIm5hbWVzIjpbIlByb21pc2UiLCJyZXF1aXJlIiwiUmVkaXMiLCJtc2dwYWNrIiwiRXZlbnRFbWl0dGVyIiwiUmVkaXNDb25uZWN0b3IiLCJvcHRpb25zIiwicHViIiwic3ViIiwic3Vic2NyaWJlIiwiY2F0Y2hSZXR1cm4iLCJvbiIsIl9vbk1lc3NhZ2UiLCJiaW5kIiwiZW1pdCIsImJ1ZiIsImRhdGEiLCJjaCIsInRvU3RyaW5nIiwicHVibGlzaCIsInVuc3Vic2NyaWJlIiwiYWxsIiwicXVpdCIsIk1lbW9yeUNvbm5lY3RvciIsInJlc29sdmUiLCJ0aGVuIiwiRW1pdHRlclB1YnN1YkJyb2tlciIsImNvbm5lY3QiLCJwcmVmaXgiLCJpbmNsdWRlQ2hhbm5lbCIsImNsaWVudENoYW5uZWxzIiwiY2hhbm5lbENsaWVudHMiLCJjb25uZWN0b3IiLCJzZXJpYWxpemUiLCJfZGlzcGF0Y2giLCJjbGllbnQiLCJjbGllbnRzIiwiZ2V0Iiwic2V0IiwiYWRkIiwibmNsaWVudHMiLCJkZWxldGUiLCJzaXplIiwibXNnIiwiZW5jb2RlIiwiY2hhbm5lbCIsImNoYW5uZWxzIiwiX2NoYW5uZWxBZGRDbGllbnQiLCJfY2hhbm5lbFJlbW92ZUNsaWVudCIsImVhY2giLCJuYW1lIiwiYXJncyIsIl9tYWtlTWVzc2FnZSIsInNlbmRlciIsImlkIiwicmVzIiwicGxlbiIsImxlbmd0aCIsInB1c2giLCJzbGljZSIsImNsZWFyIiwiY2xvc2UiLCJtZXNzYWdlIiwiZGVjb2RlIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxJQUFNQSxVQUFVQyxRQUFRLFVBQVIsQ0FBaEI7QUFDQSxJQUFNQyxRQUFRRCxRQUFRLFNBQVIsQ0FBZDtBQUNBLElBQU1FLFVBQVVGLFFBQVEsY0FBUixDQUFoQjs7ZUFDeUJBLFFBQVEsZUFBUixDOztJQUFqQkcsWSxZQUFBQSxZOztBQUVSOzs7Ozs7O0FBT0E7Ozs7Ozs7Ozs7QUFVQTs7Ozs7Ozs7O0FBU0E7Ozs7Ozs7OztBQVNBOzs7Ozs7OztBQVFBOzs7Ozs7O0FBT0E7Ozs7Ozs7O0lBUU1DLGM7OztBQUNKLDBCQUFhQyxPQUFiLEVBQXNCO0FBQUE7O0FBQUE7O0FBRXBCLFVBQUtDLEdBQUwsR0FBVyxJQUFJTCxLQUFKLENBQVVJLE9BQVYsQ0FBWDtBQUNBLFVBQUtFLEdBQUwsR0FBVyxJQUFJTixLQUFKLENBQVVJLE9BQVYsQ0FBWDtBQUNBLFVBQUtFLEdBQUwsQ0FBU0MsU0FBVCxHQUFxQkMsV0FBckI7QUFDQSxVQUFLRixHQUFMLENBQVNHLEVBQVQsQ0FBWSxlQUFaLEVBQTZCLE1BQUtDLFVBQUwsQ0FBZ0JDLElBQWhCLE9BQTdCO0FBQ0EsVUFBS0wsR0FBTCxDQUFTRyxFQUFULENBQVksT0FBWixFQUFxQixNQUFLRyxJQUFMLENBQVVELElBQVYsT0FBckI7QUFDQSxVQUFLTixHQUFMLENBQVNJLEVBQVQsQ0FBWSxPQUFaLEVBQXFCLE1BQUtHLElBQUwsQ0FBVUQsSUFBVixPQUFyQjtBQVBvQjtBQVFyQjs7OzsrQkFFV0UsRyxFQUFLQyxJLEVBQU07QUFDckIsVUFBSUMsS0FBS0YsSUFBSUcsUUFBSixFQUFUO0FBQ0EsV0FBS0osSUFBTCxDQUFVLFNBQVYsRUFBcUJHLEVBQXJCLEVBQXlCRCxJQUF6QjtBQUNEOzs7NEJBRVFDLEUsRUFBSUQsSSxFQUFNO0FBQ2pCLGFBQU8sS0FBS1QsR0FBTCxDQUFTWSxPQUFULENBQWlCRixFQUFqQixFQUFxQkQsSUFBckIsQ0FBUDtBQUNEOzs7OEJBRVVDLEUsRUFBSTtBQUNiLGFBQU8sS0FBS1QsR0FBTCxDQUFTQyxTQUFULENBQW1CUSxFQUFuQixDQUFQO0FBQ0Q7OztnQ0FFWUEsRSxFQUFJO0FBQ2YsYUFBTyxLQUFLVCxHQUFMLENBQVNZLFdBQVQsQ0FBcUJILEVBQXJCLENBQVA7QUFDRDs7OzRCQUVRO0FBQ1AsYUFBT2pCLFFBQVFxQixHQUFSLENBQVksQ0FBQyxLQUFLZCxHQUFMLENBQVNlLElBQVQsRUFBRCxFQUFrQixLQUFLZCxHQUFMLENBQVNjLElBQVQsRUFBbEIsQ0FBWixDQUFQO0FBQ0Q7OztFQTlCMEJsQixZOztJQWlDdkJtQixlOzs7QUFDSiwyQkFBYWpCLE9BQWIsRUFBc0I7QUFBQTtBQUFBO0FBRXJCOzs7OzRCQUVRVyxFLEVBQUlELEksRUFBTTtBQUFBOztBQUNqQixhQUFPaEIsUUFBUXdCLE9BQVIsR0FDSkMsSUFESSxDQUNDO0FBQUEsZUFBTSxPQUFLWCxJQUFMLENBQVUsU0FBVixFQUFxQkcsRUFBckIsRUFBeUJELElBQXpCLENBQU47QUFBQSxPQURELENBQVA7QUFFRDs7OzhCQUVVQyxFLEVBQUk7QUFDYixhQUFPakIsUUFBUXdCLE9BQVIsRUFBUDtBQUNEOzs7Z0NBRVlQLEUsRUFBSTtBQUNmLGFBQU9qQixRQUFRd0IsT0FBUixFQUFQO0FBQ0Q7Ozs0QkFFUTtBQUNQLGFBQU94QixRQUFRd0IsT0FBUixFQUFQO0FBQ0Q7OztFQXBCMkJwQixZOztBQXVCOUI7Ozs7Ozs7Ozs7QUFVQTs7Ozs7SUFHTXNCLG1COzs7QUFDSjs7Ozs7OztBQU9BLCtCQUFhcEIsT0FBYixFQUFzQjtBQUFBOztBQUFBOztBQUVwQixRQUFJLE9BQU9BLE9BQVAsS0FBbUIsUUFBdkIsRUFBaUM7QUFDL0JBLGdCQUFVLEVBQUVxQixTQUFTckIsT0FBWCxFQUFWO0FBQ0Q7QUFDRCxXQUFLc0IsTUFBTCxHQUFjdEIsUUFBUXNCLE1BQVIsSUFBa0Isd0JBQWhDO0FBQ0EsV0FBS0MsY0FBTCxHQUFzQnZCLFFBQVF1QixjQUE5QjtBQUNBLFdBQUtDLGNBQUwsR0FBc0IsbUJBQXRCO0FBQ0EsV0FBS0MsY0FBTCxHQUFzQixtQkFBdEI7QUFDQSxRQUFJekIsUUFBUXFCLE9BQVIsSUFBbUJyQixRQUFRMEIsU0FBL0IsRUFBMEM7QUFDeEMsYUFBS0EsU0FBTCxHQUFpQjFCLFFBQVEwQixTQUFSLElBQXFCLElBQUkzQixjQUFKLENBQW1CQyxRQUFRcUIsT0FBM0IsQ0FBdEM7QUFDQSxhQUFLTSxTQUFMLEdBQWlCLElBQWpCO0FBQ0QsS0FIRCxNQUdPO0FBQ0wsYUFBS0QsU0FBTCxHQUFpQixJQUFJVCxlQUFKLEVBQWpCO0FBQ0EsYUFBS1UsU0FBTCxHQUFpQixLQUFqQjtBQUNEO0FBQ0QsV0FBS0QsU0FBTCxDQUFlckIsRUFBZixDQUFrQixTQUFsQixFQUE2QixPQUFLdUIsU0FBTCxDQUFlckIsSUFBZixRQUE3QjtBQUNBOzs7Ozs7O0FBT0EsV0FBS21CLFNBQUwsQ0FBZXJCLEVBQWYsQ0FBa0IsT0FBbEIsRUFBMkIsT0FBS0csSUFBTCxDQUFVRCxJQUFWLFFBQTNCO0FBeEJvQjtBQXlCckI7Ozs7c0NBRWtCc0IsTSxFQUFRbEIsRSxFQUFJO0FBQzdCLFVBQUltQixVQUFVLEtBQUtMLGNBQUwsQ0FBb0JNLEdBQXBCLENBQXdCcEIsRUFBeEIsQ0FBZDtBQUNBLFVBQUltQixXQUFXLElBQWYsRUFBcUI7QUFDbkJBLGtCQUFVLG1CQUFWO0FBQ0EsYUFBS0wsY0FBTCxDQUFvQk8sR0FBcEIsQ0FBd0JyQixFQUF4QixFQUE0Qm1CLE9BQTVCO0FBQ0FBLGdCQUFRRyxHQUFSLENBQVlKLE1BQVo7QUFDQSxlQUFPLEtBQUtILFNBQUwsQ0FBZXZCLFNBQWYsQ0FBeUJRLEVBQXpCLENBQVA7QUFDRCxPQUxELE1BS087QUFDTG1CLGdCQUFRRyxHQUFSLENBQVlKLE1BQVo7QUFDQSxlQUFPbkMsUUFBUXdCLE9BQVIsRUFBUDtBQUNEO0FBQ0Y7Ozt5Q0FFcUJXLE0sRUFBUWxCLEUsRUFBSTtBQUNoQyxVQUFJbUIsVUFBVSxLQUFLTCxjQUFMLENBQW9CTSxHQUFwQixDQUF3QnBCLEVBQXhCLENBQWQ7QUFDQSxVQUFJdUIsaUJBQUo7QUFDQSxVQUFJSixXQUFXLElBQWYsRUFBcUI7QUFDbkJBLGdCQUFRSyxNQUFSLENBQWVOLE1BQWY7QUFDQUssbUJBQVdKLFFBQVFNLElBQW5CO0FBQ0Q7QUFDRCxVQUFJRixhQUFhLENBQWpCLEVBQW9CO0FBQ2xCLGVBQU8sS0FBS1IsU0FBTCxDQUFlWixXQUFmLENBQTJCSCxFQUEzQixDQUFQO0FBQ0QsT0FGRCxNQUVPO0FBQ0wsZUFBT2pCLFFBQVF3QixPQUFSLEVBQVA7QUFDRDtBQUNGOzs7aUNBRWFtQixHLEVBQUs7QUFDakIsYUFBTyxLQUFLVixTQUFMLEdBQWlCOUIsUUFBUXlDLE1BQVIsQ0FBZUQsR0FBZixDQUFqQixHQUF1Q0EsR0FBOUM7QUFDRDs7QUFFRDs7Ozs7Ozs7Ozs4QkFPV1IsTSxFQUFRVSxPLEVBQVM7QUFDMUIsVUFBSUMsV0FBVyxLQUFLaEIsY0FBTCxDQUFvQk8sR0FBcEIsQ0FBd0JGLE1BQXhCLENBQWY7QUFDQSxVQUFJLENBQUNXLFFBQUwsRUFBZTtBQUNiQSxtQkFBVyxtQkFBWDtBQUNBLGFBQUtoQixjQUFMLENBQW9CUSxHQUFwQixDQUF3QkgsTUFBeEIsRUFBZ0NXLFFBQWhDO0FBQ0Q7QUFDRCxVQUFJN0IsS0FBSyxLQUFLVyxNQUFMLEdBQWNpQixPQUF2QjtBQUNBQyxlQUFTUCxHQUFULENBQWF0QixFQUFiO0FBQ0EsYUFBTyxLQUFLOEIsaUJBQUwsQ0FBdUJaLE1BQXZCLEVBQStCbEIsRUFBL0IsQ0FBUDtBQUNEOztBQUVEOzs7Ozs7Ozs7O2dDQU9ha0IsTSxFQUFRVSxPLEVBQVM7QUFDNUIsVUFBSUMsV0FBVyxLQUFLaEIsY0FBTCxDQUFvQk8sR0FBcEIsQ0FBd0JGLE1BQXhCLENBQWY7QUFDQSxVQUFJbEIsS0FBSyxLQUFLVyxNQUFMLEdBQWNpQixPQUF2QjtBQUNBLFVBQUlDLFFBQUosRUFBYztBQUNaQSxpQkFBU0wsTUFBVCxDQUFnQnhCLEVBQWhCO0FBQ0Q7QUFDRCxhQUFPLEtBQUsrQixvQkFBTCxDQUEwQmIsTUFBMUIsRUFBa0NsQixFQUFsQyxDQUFQO0FBQ0Q7O0FBRUQ7Ozs7Ozs7OzttQ0FNZ0JrQixNLEVBQVE7QUFDdEIsVUFBSVcsV0FBVyxLQUFLaEIsY0FBTCxDQUFvQk8sR0FBcEIsQ0FBd0JGLE1BQXhCLENBQWY7QUFDQSxXQUFLTCxjQUFMLENBQW9CVyxNQUFwQixDQUEyQk4sTUFBM0I7QUFDQSxVQUFJVyxRQUFKLEVBQWM7QUFDWixlQUFPOUMsUUFBUWlELElBQVIsQ0FDTEgsUUFESyxFQUNLLEtBQUtFLG9CQUFMLENBQTBCbkMsSUFBMUIsQ0FBK0IsSUFBL0IsRUFBcUNzQixNQUFyQyxDQURMLENBQVA7QUFFRCxPQUhELE1BR087QUFDTCxlQUFPbkMsUUFBUXdCLE9BQVIsRUFBUDtBQUNEO0FBQ0Y7O0FBRUQ7Ozs7Ozs7Ozs7OzRCQVFTcUIsTyxFQUFTSyxJLEVBQWU7QUFBQSx3Q0FBTkMsSUFBTTtBQUFOQSxZQUFNO0FBQUE7O0FBQy9CLFVBQUlsQyxLQUFLLEtBQUtXLE1BQUwsR0FBY2lCLE9BQXZCO0FBQ0EsVUFBSUYsTUFBTSxLQUFLUyxZQUFMLENBQWtCLEVBQUNGLFVBQUQsRUFBT0MsVUFBUCxFQUFsQixDQUFWO0FBQ0EsYUFBTyxLQUFLbkIsU0FBTCxDQUFlYixPQUFmLENBQXVCRixFQUF2QixFQUEyQjBCLEdBQTNCLENBQVA7QUFDRDs7QUFFRDs7Ozs7Ozs7Ozs7Ozt5QkFVTVIsTSxFQUFRVSxPLEVBQVNLLEksRUFBZTtBQUFBLHlDQUFOQyxJQUFNO0FBQU5BLFlBQU07QUFBQTs7QUFDcEMsVUFBSWxDLEtBQUssS0FBS1csTUFBTCxHQUFjaUIsT0FBdkI7QUFDQSxVQUFJUSxTQUFTbEIsT0FBT21CLEVBQXBCO0FBQ0EsVUFBSVgsTUFBTSxLQUFLUyxZQUFMLENBQWtCLEVBQUNDLGNBQUQsRUFBU0gsVUFBVCxFQUFlQyxVQUFmLEVBQWxCLENBQVY7QUFDQSxhQUFPLEtBQUtuQixTQUFMLENBQWViLE9BQWYsQ0FBdUJGLEVBQXZCLEVBQTJCMEIsR0FBM0IsQ0FBUDtBQUNEOztBQUVEOzs7Ozs7Ozs7cUNBTWtCUixNLEVBQVE7QUFDeEIsVUFBSVcsV0FBVyxLQUFLaEIsY0FBTCxDQUFvQk8sR0FBcEIsQ0FBd0JGLE1BQXhCLENBQWY7QUFDQSxVQUFJb0IsTUFBTSxFQUFWO0FBQ0EsVUFBSVQsUUFBSixFQUFjO0FBQ1osWUFBSVUsT0FBTyxLQUFLNUIsTUFBTCxDQUFZNkIsTUFBdkI7QUFEWTtBQUFBO0FBQUE7O0FBQUE7QUFFWiwwREFBb0JYLFFBQXBCLDRHQUE4QjtBQUFBLGdCQUFyQkQsT0FBcUI7O0FBQzVCVSxnQkFBSUcsSUFBSixDQUFTYixRQUFRYyxLQUFSLENBQWNILElBQWQsQ0FBVDtBQUNEO0FBSlc7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUtiO0FBQ0QsYUFBT0QsR0FBUDtBQUNEOztBQUVEOzs7Ozs7Ozs0QkFLUztBQUNQLFdBQUt4QixjQUFMLENBQW9CNkIsS0FBcEI7QUFDQSxXQUFLOUIsY0FBTCxDQUFvQjhCLEtBQXBCO0FBQ0EsYUFBTyxLQUFLNUIsU0FBTCxDQUFlNkIsS0FBZixFQUFQO0FBQ0Q7Ozs4QkFFVTVDLEUsRUFBSUQsSSxFQUFNO0FBQ25CLFVBQUk2QixVQUFVNUIsR0FBRzBDLEtBQUgsQ0FBUyxLQUFLL0IsTUFBTCxDQUFZNkIsTUFBckIsQ0FBZDtBQUNBLFVBQUlLLFVBQVUsS0FBSzdCLFNBQUwsR0FBaUI5QixRQUFRNEQsTUFBUixDQUFlL0MsSUFBZixDQUFqQixHQUF3Q0EsSUFBdEQ7QUFDQSxVQUFJb0IsVUFBVSxLQUFLTCxjQUFMLENBQW9CTSxHQUFwQixDQUF3QnBCLEVBQXhCLENBQWQ7QUFDQTtBQUNBLFVBQUltQixPQUFKLEVBQWE7QUFDWCxZQUFJZSxhQUFKO0FBQ0EsWUFBSSxLQUFLdEIsY0FBVCxFQUF5QjtBQUN2QnNCLGtCQUFRVyxRQUFRWixJQUFoQixFQUFzQkwsT0FBdEIsMENBQWtDaUIsUUFBUVgsSUFBMUM7QUFDRCxTQUZELE1BRU87QUFDTEEsa0JBQVFXLFFBQVFaLElBQWhCLDBDQUF5QlksUUFBUVgsSUFBakM7QUFDRDtBQU5VO0FBQUE7QUFBQTs7QUFBQTtBQU9YLDJEQUFtQmYsT0FBbkIsaUhBQTRCO0FBQUEsZ0JBQW5CRCxNQUFtQjs7QUFDMUIsZ0JBQUksQ0FBQzJCLFFBQVFULE1BQVQsSUFBbUJsQixPQUFPbUIsRUFBUCxLQUFjUSxRQUFRVCxNQUE3QyxFQUFxRDtBQUNuRGxCLHFCQUFPckIsSUFBUCxnREFBZXFDLElBQWY7QUFDRDtBQUNGO0FBWFU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVlaO0FBQ0Y7OztFQW5NK0IvQyxZOztBQXVNbEM0RCxPQUFPQyxPQUFQLEdBQWlCdkMsbUJBQWpCIiwiZmlsZSI6IkVtaXR0ZXJQdWJzdWJCcm9rZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCdcblxuY29uc3QgUHJvbWlzZSA9IHJlcXVpcmUoJ2JsdWViaXJkJylcbmNvbnN0IFJlZGlzID0gcmVxdWlyZSgnaW9yZWRpcycpXG5jb25zdCBtc2dwYWNrID0gcmVxdWlyZSgnbXNncGFjay1saXRlJylcbmNvbnN0IHsgRXZlbnRFbWl0dGVyIH0gPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJylcblxuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIGNvbm5lY3RvciBpbXBsZW1lbnRhdGlvbnMuXG4gKlxuICogQGludGVyZmFjZSBDb25uZWN0b3JcbiAqIEBleHRlbmRzIEV2ZW50RW1pdHRlclxuICovXG5cbi8qKlxuICogQG1ldGhvZFxuICogQGluc3RhbmNlXG4gKiBAbmFtZSBwdWJsaXNoXG4gKiBAbWVtYmVyT2YgQ29ubmVjdG9yXG4gKiBAcGFyYW0ge3N0cmluZ30gY2hhbm5lbCBDaGFubmVsLlxuICogQHBhcmFtIHtCdWZmZXJ9IGRhdGEgRGF0YS5cbiAqIEByZXR1cm4ge1Byb21pc2U8dW5kZWZpbmVkPn1cbiAqL1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBpbnN0YW5jZVxuICogQG5hbWUgc3Vic2NyaWJlXG4gKiBAbWVtYmVyT2YgQ29ubmVjdG9yXG4gKiBAcGFyYW0ge3N0cmluZ30gY2hhbm5lbCBDaGFubmVsLlxuICogQHJldHVybiB7UHJvbWlzZTx1bmRlZmluZWQ+fVxuICovXG5cbi8qKlxuICogQG1ldGhvZFxuICogQGluc3RhbmNlXG4gKiBAbmFtZSB1bnN1YnNjcmliZVxuICogQG1lbWJlck9mIENvbm5lY3RvclxuICogQHBhcmFtIHtzdHJpbmd9IGNoYW5uZWwgQ2hhbm5lbC5cbiAqIEByZXR1cm4ge1Byb21pc2U8dW5kZWZpbmVkPn1cbiAqL1xuXG4vKipcbiAqIEBtZXRob2RcbiAqIEBpbnN0YW5jZVxuICogQG5hbWUgY2xvc2VcbiAqIEBtZW1iZXJPZiBDb25uZWN0b3JcbiAqIEByZXR1cm4ge1Byb21pc2U8dW5kZWZpbmVkPn1cbiAqL1xuXG4vKipcbiAqIEBldmVudCBtZXNzYWdlXG4gKiBAbWVtYmVyT2YgQ29ubmVjdG9yXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQgRXZlbnQgbmFtZS5cbiAqIEBwYXJhbSB7QnVmZmVyfSBkYXRhIEV2ZW50IGRhdGEuXG4gKi9cblxuLyoqXG4gKiBFdmVudCB3aWxsIGJlIGxpc3RlbmVkIGJ5IHtAbGluayBFbWl0dGVyUHVic3ViQnJva2VyfSBpbnN0YW5jZS5cbiAqXG4gKiBAZXZlbnQgZXJyb3JcbiAqIEBtZW1iZXJPZiBDb25uZWN0b3JcbiAqIEBwYXJhbSB7RXJyb3J9IGVycm9yIEVycm9yLlxuICovXG5cbmNsYXNzIFJlZGlzQ29ubmVjdG9yIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgY29uc3RydWN0b3IgKG9wdGlvbnMpIHtcbiAgICBzdXBlcigpXG4gICAgdGhpcy5wdWIgPSBuZXcgUmVkaXMob3B0aW9ucylcbiAgICB0aGlzLnN1YiA9IG5ldyBSZWRpcyhvcHRpb25zKVxuICAgIHRoaXMuc3ViLnN1YnNjcmliZSgpLmNhdGNoUmV0dXJuKClcbiAgICB0aGlzLnN1Yi5vbignbWVzc2FnZUJ1ZmZlcicsIHRoaXMuX29uTWVzc2FnZS5iaW5kKHRoaXMpKVxuICAgIHRoaXMuc3ViLm9uKCdlcnJvcicsIHRoaXMuZW1pdC5iaW5kKHRoaXMpKVxuICAgIHRoaXMucHViLm9uKCdlcnJvcicsIHRoaXMuZW1pdC5iaW5kKHRoaXMpKVxuICB9XG5cbiAgX29uTWVzc2FnZSAoYnVmLCBkYXRhKSB7XG4gICAgbGV0IGNoID0gYnVmLnRvU3RyaW5nKClcbiAgICB0aGlzLmVtaXQoJ21lc3NhZ2UnLCBjaCwgZGF0YSlcbiAgfVxuXG4gIHB1Ymxpc2ggKGNoLCBkYXRhKSB7XG4gICAgcmV0dXJuIHRoaXMucHViLnB1Ymxpc2goY2gsIGRhdGEpXG4gIH1cblxuICBzdWJzY3JpYmUgKGNoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3ViLnN1YnNjcmliZShjaClcbiAgfVxuXG4gIHVuc3Vic2NyaWJlIChjaCkge1xuICAgIHJldHVybiB0aGlzLnN1Yi51bnN1YnNjcmliZShjaClcbiAgfVxuXG4gIGNsb3NlICgpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoW3RoaXMucHViLnF1aXQoKSwgdGhpcy5zdWIucXVpdCgpXSlcbiAgfVxufVxuXG5jbGFzcyBNZW1vcnlDb25uZWN0b3IgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICBjb25zdHJ1Y3RvciAob3B0aW9ucykge1xuICAgIHN1cGVyKClcbiAgfVxuXG4gIHB1Ymxpc2ggKGNoLCBkYXRhKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgICAudGhlbigoKSA9PiB0aGlzLmVtaXQoJ21lc3NhZ2UnLCBjaCwgZGF0YSkpXG4gIH1cblxuICBzdWJzY3JpYmUgKGNoKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gIH1cblxuICB1bnN1YnNjcmliZSAoY2gpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgfVxuXG4gIGNsb3NlICgpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgfVxufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEVtaXR0ZXJQdWJzdWJCcm9rZXIuT3B0aW9uc1xuICpcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjb25uZWN0IENvbm5lY3Qgc3RyaW5nLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtwcmVmaXg9J2VtaXR0ZXItcHVic3ViLWJyb2tlcjonXSBQcmVmaXguXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtpbmNsdWRlQ2hhbm5lbD1mYWxzZV0gSW5jbHVkZSBjaGFubmVsIGFzIHRoZVxuICogZmlyc3QgYXJndW1lbnQuXG4gKiBAcHJvcGVydHkge0Nvbm5lY3Rvcn0gW2Nvbm5lY3Rvcl0gQ3VzdG9tIGNvbm5lY3RvciBpbXBsZW1lbnRhdGlvbi5cbiAqL1xuXG4vKipcbiAqIEBleHRlbmRzIEV2ZW50RW1pdHRlclxuICovXG5jbGFzcyBFbWl0dGVyUHVic3ViQnJva2VyIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBicm9rZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7RW1pdHRlclB1YnN1YkJyb2tlci5PcHRpb25zfHN0cmluZ30gb3B0aW9ucyBPcHRpb25zIG9yIGFcbiAgICogY29ubmVjdCBpZiBhIHN0cmluZy4gSWYgY29ubmVjdCBzdHJpbmcgaXMgZW1wdHksIHRoZW4gYW5cbiAgICogaW4tbWVtb3J5IGNvbm5lY3RvciBpcyB1c2VkLlxuICAgKi9cbiAgY29uc3RydWN0b3IgKG9wdGlvbnMpIHtcbiAgICBzdXBlcigpXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnc3RyaW5nJykge1xuICAgICAgb3B0aW9ucyA9IHsgY29ubmVjdDogb3B0aW9ucyB9XG4gICAgfVxuICAgIHRoaXMucHJlZml4ID0gb3B0aW9ucy5wcmVmaXggfHwgJ2VtaXR0ZXItcHVic3ViLWJyb2tlcjonXG4gICAgdGhpcy5pbmNsdWRlQ2hhbm5lbCA9IG9wdGlvbnMuaW5jbHVkZUNoYW5uZWxcbiAgICB0aGlzLmNsaWVudENoYW5uZWxzID0gbmV3IE1hcCgpXG4gICAgdGhpcy5jaGFubmVsQ2xpZW50cyA9IG5ldyBNYXAoKVxuICAgIGlmIChvcHRpb25zLmNvbm5lY3QgfHwgb3B0aW9ucy5jb25uZWN0b3IpIHtcbiAgICAgIHRoaXMuY29ubmVjdG9yID0gb3B0aW9ucy5jb25uZWN0b3IgfHwgbmV3IFJlZGlzQ29ubmVjdG9yKG9wdGlvbnMuY29ubmVjdClcbiAgICAgIHRoaXMuc2VyaWFsaXplID0gdHJ1ZVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvbm5lY3RvciA9IG5ldyBNZW1vcnlDb25uZWN0b3IoKVxuICAgICAgdGhpcy5zZXJpYWxpemUgPSBmYWxzZVxuICAgIH1cbiAgICB0aGlzLmNvbm5lY3Rvci5vbignbWVzc2FnZScsIHRoaXMuX2Rpc3BhdGNoLmJpbmQodGhpcykpXG4gICAgLyoqXG4gICAgICogQ29ubmVjdG9yIGVycm9yLiBEb2VzIG5vdCB0aHJvdyBpZiB0aGVyZSBhcmUgbm8gbGlzdGVuZXJzLlxuICAgICAqXG4gICAgICogQGV2ZW50IGVycm9yXG4gICAgICogQG1lbWJlck9mIEVtaXR0ZXJQdWJzdWJCcm9rZXJcbiAgICAgKiBAcGFyYW0ge0Vycm9yfSBlcnJvciBFcnJvci5cbiAgICAgKi9cbiAgICB0aGlzLmNvbm5lY3Rvci5vbignZXJyb3InLCB0aGlzLmVtaXQuYmluZCh0aGlzKSlcbiAgfVxuXG4gIF9jaGFubmVsQWRkQ2xpZW50IChjbGllbnQsIGNoKSB7XG4gICAgbGV0IGNsaWVudHMgPSB0aGlzLmNoYW5uZWxDbGllbnRzLmdldChjaClcbiAgICBpZiAoY2xpZW50cyA9PSBudWxsKSB7XG4gICAgICBjbGllbnRzID0gbmV3IFNldCgpXG4gICAgICB0aGlzLmNoYW5uZWxDbGllbnRzLnNldChjaCwgY2xpZW50cylcbiAgICAgIGNsaWVudHMuYWRkKGNsaWVudClcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5zdWJzY3JpYmUoY2gpXG4gICAgfSBlbHNlIHtcbiAgICAgIGNsaWVudHMuYWRkKGNsaWVudClcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgIH1cbiAgfVxuXG4gIF9jaGFubmVsUmVtb3ZlQ2xpZW50IChjbGllbnQsIGNoKSB7XG4gICAgbGV0IGNsaWVudHMgPSB0aGlzLmNoYW5uZWxDbGllbnRzLmdldChjaClcbiAgICBsZXQgbmNsaWVudHNcbiAgICBpZiAoY2xpZW50cyAhPSBudWxsKSB7XG4gICAgICBjbGllbnRzLmRlbGV0ZShjbGllbnQpXG4gICAgICBuY2xpZW50cyA9IGNsaWVudHMuc2l6ZVxuICAgIH1cbiAgICBpZiAobmNsaWVudHMgPT09IDApIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci51bnN1YnNjcmliZShjaClcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgfVxuICB9XG5cbiAgX21ha2VNZXNzYWdlIChtc2cpIHtcbiAgICByZXR1cm4gdGhpcy5zZXJpYWxpemUgPyBtc2dwYWNrLmVuY29kZShtc2cpIDogbXNnXG4gIH1cblxuICAvKipcbiAgICogU3Vic2NyaWJlcyBlbWl0dGVyIHRvIGEgY2hhbm5lbC5cbiAgICpcbiAgICogQHBhcmFtIHtFdmVudEVtaXR0ZXJ9IGNsaWVudCBFbWl0dGVyLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2hhbm5lbCBDaGFubmVsLlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPHVuZGVmaW5lZD59XG4gICAqL1xuICBzdWJzY3JpYmUgKGNsaWVudCwgY2hhbm5lbCkge1xuICAgIGxldCBjaGFubmVscyA9IHRoaXMuY2xpZW50Q2hhbm5lbHMuZ2V0KGNsaWVudClcbiAgICBpZiAoIWNoYW5uZWxzKSB7XG4gICAgICBjaGFubmVscyA9IG5ldyBTZXQoKVxuICAgICAgdGhpcy5jbGllbnRDaGFubmVscy5zZXQoY2xpZW50LCBjaGFubmVscylcbiAgICB9XG4gICAgbGV0IGNoID0gdGhpcy5wcmVmaXggKyBjaGFubmVsXG4gICAgY2hhbm5lbHMuYWRkKGNoKVxuICAgIHJldHVybiB0aGlzLl9jaGFubmVsQWRkQ2xpZW50KGNsaWVudCwgY2gpXG4gIH1cblxuICAvKipcbiAgICogVW5zdWJzY3JpYmVzIGVtaXR0ZXIgZnJvbSBhIGNoYW5uZWwuXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnRFbWl0dGVyfSBjbGllbnQgRW1pdHRlci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNoYW5uZWwgQ2hhbm5lbC5cbiAgICogQHJldHVybiB7UHJvbWlzZTx1bmRlZmluZWQ+fVxuICAgKi9cbiAgdW5zdWJzY3JpYmUgKGNsaWVudCwgY2hhbm5lbCkge1xuICAgIGxldCBjaGFubmVscyA9IHRoaXMuY2xpZW50Q2hhbm5lbHMuZ2V0KGNsaWVudClcbiAgICBsZXQgY2ggPSB0aGlzLnByZWZpeCArIGNoYW5uZWxcbiAgICBpZiAoY2hhbm5lbHMpIHtcbiAgICAgIGNoYW5uZWxzLmRlbGV0ZShjaClcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2NoYW5uZWxSZW1vdmVDbGllbnQoY2xpZW50LCBjaClcbiAgfVxuXG4gIC8qKlxuICAgKiBVbnN1YnNjcmliZXMgZW1pdHRlciBmcm9tIGFsbCBjaGFubmVsLlxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50RW1pdHRlcn0gY2xpZW50IEVtaXR0ZXIuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8dW5kZWZpbmVkPn1cbiAgICovXG4gIHVuc3Vic2NyaWJlYWxsIChjbGllbnQpIHtcbiAgICBsZXQgY2hhbm5lbHMgPSB0aGlzLmNsaWVudENoYW5uZWxzLmdldChjbGllbnQpXG4gICAgdGhpcy5jbGllbnRDaGFubmVscy5kZWxldGUoY2xpZW50KVxuICAgIGlmIChjaGFubmVscykge1xuICAgICAgcmV0dXJuIFByb21pc2UuZWFjaChcbiAgICAgICAgY2hhbm5lbHMsIHRoaXMuX2NoYW5uZWxSZW1vdmVDbGllbnQuYmluZCh0aGlzLCBjbGllbnQpKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUHVibGlzaCBhbiBldmVudCB0byBhIGNoYW5uZWwuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjaGFubmVsIENoYW5uZWwuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIEV2ZW50IG5hbWUuXG4gICAqIEBwYXJhbSB7Kn0gYXJncyBBcmd1bWVudHMuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8dW5kZWZpbmVkPn1cbiAgICovXG4gIHB1Ymxpc2ggKGNoYW5uZWwsIG5hbWUsIC4uLmFyZ3MpIHtcbiAgICBsZXQgY2ggPSB0aGlzLnByZWZpeCArIGNoYW5uZWxcbiAgICBsZXQgbXNnID0gdGhpcy5fbWFrZU1lc3NhZ2Uoe25hbWUsIGFyZ3N9KVxuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5wdWJsaXNoKGNoLCBtc2cpXG4gIH1cblxuICAvKipcbiAgICogUHVibGlzaCBhbiBldmVudCB0byBhIGNoYW5uZWwsIGV4Y2x1ZGluZyB0aGUgc2VuZGVyLiBUaGUgY2xpZW50XG4gICAqIG9iamVjdCBfX01VU1RfXyBoYXZlIGFuIHVuaXF1ZSBgaWRgIGZpZWxkLlxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50RW1pdHRlcn0gY2xpZW50IEVtaXR0ZXIuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjaGFubmVsIENoYW5uZWwuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIEV2ZW50IG5hbWUuXG4gICAqIEBwYXJhbSB7Kn0gYXJncyBBcmd1bWVudHMuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8dW5kZWZpbmVkPn1cbiAgICovXG4gIHNlbmQgKGNsaWVudCwgY2hhbm5lbCwgbmFtZSwgLi4uYXJncykge1xuICAgIGxldCBjaCA9IHRoaXMucHJlZml4ICsgY2hhbm5lbFxuICAgIGxldCBzZW5kZXIgPSBjbGllbnQuaWRcbiAgICBsZXQgbXNnID0gdGhpcy5fbWFrZU1lc3NhZ2Uoe3NlbmRlciwgbmFtZSwgYXJnc30pXG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLnB1Ymxpc2goY2gsIG1zZylcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGNsaWVudCBzdWJzY3JpcHRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50RW1pdHRlcn0gY2xpZW50IEVtaXR0ZXIuXG4gICAqIEByZXR1cm4ge0FycmF5PHN0cmluZz59XG4gICAqL1xuICBnZXRTdWJzY3JpcHRpb25zIChjbGllbnQpIHtcbiAgICBsZXQgY2hhbm5lbHMgPSB0aGlzLmNsaWVudENoYW5uZWxzLmdldChjbGllbnQpXG4gICAgbGV0IHJlcyA9IFtdXG4gICAgaWYgKGNoYW5uZWxzKSB7XG4gICAgICBsZXQgcGxlbiA9IHRoaXMucHJlZml4Lmxlbmd0aFxuICAgICAgZm9yIChsZXQgY2hhbm5lbCBvZiBjaGFubmVscykge1xuICAgICAgICByZXMucHVzaChjaGFubmVsLnNsaWNlKHBsZW4pKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzXG4gIH1cblxuICAvKipcbiAgICogQ2xvc2VzIGJyb2tlci5cbiAgICpcbiAgICogQHJldHVybiB7UHJvbWlzZTx1bmRlZmluZWQ+fVxuICAgKi9cbiAgY2xvc2UgKCkge1xuICAgIHRoaXMuY2hhbm5lbENsaWVudHMuY2xlYXIoKVxuICAgIHRoaXMuY2xpZW50Q2hhbm5lbHMuY2xlYXIoKVxuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5jbG9zZSgpXG4gIH1cblxuICBfZGlzcGF0Y2ggKGNoLCBkYXRhKSB7XG4gICAgbGV0IGNoYW5uZWwgPSBjaC5zbGljZSh0aGlzLnByZWZpeC5sZW5ndGgpXG4gICAgbGV0IG1lc3NhZ2UgPSB0aGlzLnNlcmlhbGl6ZSA/IG1zZ3BhY2suZGVjb2RlKGRhdGEpIDogZGF0YVxuICAgIGxldCBjbGllbnRzID0gdGhpcy5jaGFubmVsQ2xpZW50cy5nZXQoY2gpXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoY2xpZW50cykge1xuICAgICAgbGV0IGFyZ3NcbiAgICAgIGlmICh0aGlzLmluY2x1ZGVDaGFubmVsKSB7XG4gICAgICAgIGFyZ3MgPSBbbWVzc2FnZS5uYW1lLCBjaGFubmVsLCAuLi5tZXNzYWdlLmFyZ3NdXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhcmdzID0gW21lc3NhZ2UubmFtZSwgLi4ubWVzc2FnZS5hcmdzXVxuICAgICAgfVxuICAgICAgZm9yIChsZXQgY2xpZW50IG9mIGNsaWVudHMpIHtcbiAgICAgICAgaWYgKCFtZXNzYWdlLnNlbmRlciB8fCBjbGllbnQuaWQgIT09IG1lc3NhZ2Uuc2VuZGVyKSB7XG4gICAgICAgICAgY2xpZW50LmVtaXQoLi4uYXJncylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gRW1pdHRlclB1YnN1YkJyb2tlclxuIl19 |
{ | ||
"name": "emitter-pubsub-broker", | ||
"version": "0.1.0", | ||
"version": "0.2.0", | ||
"private": false, | ||
@@ -38,2 +38,3 @@ "description": "An utility for connecting EventEmitters via a pubsub.", | ||
"bluebird": "^3.3.5", | ||
"eventemitter3": "^2.0.2", | ||
"ioredis": "^2.4.0", | ||
@@ -40,0 +41,0 @@ "msgpack-lite": "^0.1.20", |
@@ -6,3 +6,3 @@ | ||
[![Build Status](https://travis-ci.org/an-sh/emitter-pubsub-broker.svg?branch=master)](https://travis-ci.org/an-sh/emitter-pubsub-broker) | ||
[![Appveyor status](https://ci.appveyor.com/api/projects/status/y1hrrpumx5erpa6e?svg=true)](https://ci.appveyor.com/project/an-sh/emitter-pubsub-broker) | ||
[![Appveyor status](https://ci.appveyor.com/api/projects/status/y1hrrpumx5erpa6e/branch/master?svg=true)](https://ci.appveyor.com/project/an-sh/emitter-pubsub-broker) | ||
[![Coverage Status](https://codecov.io/gh/an-sh/emitter-pubsub-broker/branch/master/graph/badge.svg)](https://codecov.io/gh/an-sh/emitter-pubsub-broker) | ||
@@ -12,3 +12,5 @@ [![Dependency Status](https://david-dm.org/an-sh/emitter-pubsub-broker.svg)](https://david-dm.org/an-sh/emitter-pubsub-broker) | ||
An utility for connecting EventEmitters via a pubsub. | ||
An utility for connecting EventEmitters via a pubsub. Includes Redis | ||
and in-memory backends, and a support of other systems can be added by | ||
implementing a very simple Connector wrapper. | ||
@@ -27,6 +29,2 @@ | ||
This project is a [node](http://nodejs.org) module available via | ||
[npm](https://npmjs.com). Go check them out if you don't have them | ||
locally installed. | ||
```sh | ||
@@ -40,5 +38,6 @@ $ npm i emitter-pubsub-broker | ||
const EmitterPubsubBroker = require('emitter-pubsub-broker') | ||
const connect = 'redis://localhost:6379' // or empty for in-memory backend | ||
let broker = new EmitterPubsubBroker(options) | ||
let client = new EventEmitter() // anything that implements interface | ||
let broker = new EmitterPubsubBroker(connect) | ||
let client = new EventEmitter() // anything that implements the interface | ||
@@ -54,3 +53,3 @@ client.on('myEvent', (...args) => { /* handler code */ }) | ||
[API](https://an-sh.github.io/emitter-pubsub-broker/0.1/index.html) | ||
[API](https://an-sh.github.io/emitter-pubsub-broker/0.2/index.html) | ||
documentation is available online. | ||
@@ -57,0 +56,0 @@ |
@@ -6,3 +6,3 @@ 'use strict' | ||
const msgpack = require('msgpack-lite') | ||
const { EventEmitter } = require('events') | ||
const { EventEmitter } = require('eventemitter3') | ||
@@ -13,2 +13,3 @@ /** | ||
* @interface Connector | ||
* @extends EventEmitter | ||
*/ | ||
@@ -59,2 +60,10 @@ | ||
/** | ||
* Event will be listened by {@link EmitterPubsubBroker} instance. | ||
* | ||
* @event error | ||
* @memberOf Connector | ||
* @param {Error} error Error. | ||
*/ | ||
class RedisConnector extends EventEmitter { | ||
@@ -67,2 +76,4 @@ constructor (options) { | ||
this.sub.on('messageBuffer', this._onMessage.bind(this)) | ||
this.sub.on('error', this.emit.bind(this)) | ||
this.pub.on('error', this.emit.bind(this)) | ||
} | ||
@@ -124,3 +135,7 @@ | ||
*/ | ||
class EmitterPubsubBroker { | ||
/** | ||
* @extends EventEmitter | ||
*/ | ||
class EmitterPubsubBroker extends EventEmitter { | ||
/** | ||
@@ -134,2 +149,3 @@ * Creates a broker. | ||
constructor (options) { | ||
super() | ||
if (typeof options === 'string') { | ||
@@ -150,2 +166,10 @@ options = { connect: options } | ||
this.connector.on('message', this._dispatch.bind(this)) | ||
/** | ||
* Connector error. Does not throw if there are no listeners. | ||
* | ||
* @event error | ||
* @memberOf EmitterPubsubBroker | ||
* @param {Error} error Error. | ||
*/ | ||
this.connector.on('error', this.emit.bind(this)) | ||
} | ||
@@ -152,0 +176,0 @@ |
@@ -20,3 +20,3 @@ 'use strict' | ||
if (broker) { | ||
return broker.close() | ||
return broker.close().catchReturn() | ||
} | ||
@@ -23,0 +23,0 @@ }) |
52592
880
6
65
+ Addedeventemitter3@^2.0.2
+ Addedeventemitter3@2.0.3(transitive)