multitude
Version:
Comprehensive streams for push and pull
181 lines (130 loc) • 16.5 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.Multicast = void 0;
var _helpers = require("../helpers");
var _from = require("../creators/from");
var _helpers2 = require("./helpers");
var _Observable = require("./Observable");
var _typeCore = require("type-core");
let _Symbol$observable;
function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
function _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "set"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }
function _classApplyDescriptorSet(receiver, descriptor, value) { if (descriptor.set) { descriptor.set.call(receiver, value); } else { if (!descriptor.writable) { throw new TypeError("attempted to set read only private field"); } descriptor.value = value; } }
function _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "get"); return _classApplyDescriptorGet(receiver, descriptor); }
function _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError("attempted to " + action + " private field on non-instance"); } return privateMap.get(receiver); }
function _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }
var _value = /*#__PURE__*/new WeakMap();
var _termination = /*#__PURE__*/new WeakMap();
_Symbol$observable = Symbol.observable;
class Multicast extends _Observable.Observable {
static of(item, ...args) {
const options = args[0];
const hooks = args[1];
return new this(obs => {
obs.next(item);
obs.complete();
}, options, hooks);
}
static from(item, options, hooks) {
if (item.constructor === this) return item;
const observable = (0, _from.from)(item);
return new this(obs => observable.subscribe(obs), options, hooks);
}
constructor(subscriber, options, hooks) {
super(obs => {
const termination = _classPrivateFieldGet(this, _termination);
if (termination) {
return typeof termination === 'boolean' ? obs.complete() : obs.error(termination[0]);
}
for (const value of values) {
obs.next(value);
}
items.add(obs);
if (hooks) {
const onSubscribe = hooks.onSubscribe;
if (!_typeCore.TypeGuard.isEmpty(onSubscribe)) {
onSubscribe.call(hooks, connect);
}
}
return () => {
items.delete(obs);
if (hooks) {
const onUnsubscribe = hooks.onUnsubscribe;
if (!_typeCore.TypeGuard.isEmpty(onUnsubscribe)) {
onUnsubscribe.call(hooks, connect);
}
}
};
});
_classPrivateFieldInitSpec(this, _value, {
writable: true,
value: void 0
});
_classPrivateFieldInitSpec(this, _termination, {
writable: true,
value: void 0
});
const opts = options || {};
const items = new Set();
const values = [];
const replay = Math.max(0, Number(opts.replay));
const observable = new _Observable.Observable(subscriber);
_classPrivateFieldSet(this, _value, opts.value);
_classPrivateFieldSet(this, _termination, false);
let subscription;
const connect = () => {
if (subscription && (!subscription.closed || this.closed)) {
return subscription;
}
return observable.subscribe({
start: subs => subscription = subs,
next: value => {
if (this.closed) return;
_classPrivateFieldSet(this, _value, value);
if (replay) {
values.push(value);
if (values.length > replay) values.shift();
}
_helpers2.Invoke.subscriptionObservers('next', value, items);
},
error: error => {
if (this.closed) {
const hooks = _helpers.HooksManager.get();
hooks.onUnhandledError(error, subscription);
}
_classPrivateFieldSet(this, _termination, [error]);
_helpers2.Invoke.subscriptionObservers('error', error, items);
},
complete: () => {
if (this.closed) return;
_classPrivateFieldSet(this, _termination, true);
_helpers2.Invoke.subscriptionObservers('complete', undefined, items);
}
});
};
if (hooks) {
try {
const onCreate = hooks.onCreate;
if (!_typeCore.TypeGuard.isEmpty(onCreate)) {
onCreate.call(hooks, connect);
}
} catch (err) {
_classPrivateFieldSet(this, _termination, [err]);
}
}
}
get value() {
return _classPrivateFieldGet(this, _value);
}
get closed() {
return Boolean(_classPrivateFieldGet(this, _termination));
}
[_Symbol$observable]() {
return _Observable.Observable.from(this);
}
}
exports.Multicast = Multicast;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wdXNoL2NsYXNzZXMvTXVsdGljYXN0LnRzIl0sIm5hbWVzIjpbIlN5bWJvbCIsIm9ic2VydmFibGUiLCJNdWx0aWNhc3QiLCJPYnNlcnZhYmxlIiwib2YiLCJpdGVtIiwiYXJncyIsIm9wdGlvbnMiLCJob29rcyIsIm9icyIsIm5leHQiLCJjb21wbGV0ZSIsImZyb20iLCJjb25zdHJ1Y3RvciIsInN1YnNjcmliZSIsInN1YnNjcmliZXIiLCJ0ZXJtaW5hdGlvbiIsImVycm9yIiwidmFsdWUiLCJ2YWx1ZXMiLCJpdGVtcyIsImFkZCIsIm9uU3Vic2NyaWJlIiwiVHlwZUd1YXJkIiwiaXNFbXB0eSIsImNhbGwiLCJjb25uZWN0IiwiZGVsZXRlIiwib25VbnN1YnNjcmliZSIsIm9wdHMiLCJTZXQiLCJyZXBsYXkiLCJNYXRoIiwibWF4IiwiTnVtYmVyIiwic3Vic2NyaXB0aW9uIiwiY2xvc2VkIiwic3RhcnQiLCJzdWJzIiwicHVzaCIsImxlbmd0aCIsInNoaWZ0IiwiSW52b2tlIiwic3Vic2NyaXB0aW9uT2JzZXJ2ZXJzIiwiSG9va3NNYW5hZ2VyIiwiZ2V0Iiwib25VbmhhbmRsZWRFcnJvciIsInVuZGVmaW5lZCIsIm9uQ3JlYXRlIiwiZXJyIiwiQm9vbGVhbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O3FCQXdKVUEsTUFBTSxDQUFDQyxVOztBQXhJVixNQUFNQyxTQUFOLFNBQ0dDLHNCQURILENBR1A7QUFPa0IsU0FBRkMsRUFBRSxDQUFJQyxJQUFKLEVBQWEsR0FBR0MsSUFBaEIsRUFBOEM7QUFDNUQsVUFBTUMsT0FBTyxHQUFHRCxJQUFJLENBQUMsQ0FBRCxDQUFwQjtBQUNBLFVBQU1FLEtBQUssR0FBR0YsSUFBSSxDQUFDLENBQUQsQ0FBbEI7QUFFQSxXQUFPLElBQUksSUFBSixDQUNKRyxHQUFELElBQVM7QUFDUEEsTUFBQUEsR0FBRyxDQUFDQyxJQUFKLENBQVNMLElBQVQ7QUFDQUksTUFBQUEsR0FBRyxDQUFDRSxRQUFKO0FBQ0QsS0FKSSxFQUtMSixPQUxLLEVBTUxDLEtBTkssQ0FBUDtBQVFEOztBQUNpQixTQUFKSSxJQUFJLENBQ2hCUCxJQURnQixFQUVoQkUsT0FGZ0IsRUFHaEJDLEtBSGdCLEVBSUM7QUFDakIsUUFBSUgsSUFBSSxDQUFDUSxXQUFMLEtBQXFCLElBQXpCLEVBQStCLE9BQU9SLElBQVA7QUFFL0IsVUFBTUosVUFBVSxHQUFHLGdCQUFLSSxJQUFMLENBQW5CO0FBQ0EsV0FBTyxJQUFJLElBQUosQ0FBZ0JJLEdBQUQsSUFBU1IsVUFBVSxDQUFDYSxTQUFYLENBQXFCTCxHQUFyQixDQUF4QixFQUFtREYsT0FBbkQsRUFBNERDLEtBQTVELENBQVA7QUFDRDs7QUFHTUssRUFBQUEsV0FBVyxDQUNoQkUsVUFEZ0IsRUFFaEJSLE9BRmdCLEVBR2hCQyxLQUhnQixFQUloQjtBQUNBLFVBQU9DLEdBQUQsSUFBUztBQUNiLFlBQU1PLFdBQVcseUJBQUcsSUFBSCxlQUFqQjs7QUFDQSxVQUFJQSxXQUFKLEVBQWlCO0FBQ2YsZUFBTyxPQUFPQSxXQUFQLEtBQXVCLFNBQXZCLEdBQ0hQLEdBQUcsQ0FBQ0UsUUFBSixFQURHLEdBRUhGLEdBQUcsQ0FBQ1EsS0FBSixDQUFVRCxXQUFXLENBQUMsQ0FBRCxDQUFyQixDQUZKO0FBR0Q7O0FBRUQsV0FBSyxNQUFNRSxLQUFYLElBQW9CQyxNQUFwQixFQUE0QjtBQUMxQlYsUUFBQUEsR0FBRyxDQUFDQyxJQUFKLENBQVNRLEtBQVQ7QUFDRDs7QUFFREUsTUFBQUEsS0FBSyxDQUFDQyxHQUFOLENBQVVaLEdBQVY7O0FBRUEsVUFBSUQsS0FBSixFQUFXO0FBQ1QsY0FBTWMsV0FBVyxHQUFHZCxLQUFLLENBQUNjLFdBQTFCOztBQUNBLFlBQUksQ0FBQ0Msb0JBQVVDLE9BQVYsQ0FBa0JGLFdBQWxCLENBQUwsRUFBcUM7QUFDbkNBLFVBQUFBLFdBQVcsQ0FBQ0csSUFBWixDQUFpQmpCLEtBQWpCLEVBQXdCa0IsT0FBeEI7QUFDRDtBQUNGOztBQUVELGFBQU8sTUFBTTtBQUNYTixRQUFBQSxLQUFLLENBQUNPLE1BQU4sQ0FBYWxCLEdBQWI7O0FBRUEsWUFBSUQsS0FBSixFQUFXO0FBQ1QsZ0JBQU1vQixhQUFhLEdBQUdwQixLQUFLLENBQUNvQixhQUE1Qjs7QUFDQSxjQUFJLENBQUNMLG9CQUFVQyxPQUFWLENBQWtCSSxhQUFsQixDQUFMLEVBQXVDO0FBQ3JDQSxZQUFBQSxhQUFhLENBQUNILElBQWQsQ0FBbUJqQixLQUFuQixFQUEwQmtCLE9BQTFCO0FBQ0Q7QUFDRjtBQUNGLE9BVEQ7QUFVRCxLQS9CRDs7QUFEQTtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFrQ0EsVUFBTUcsSUFBSSxHQUFHdEIsT0FBTyxJQUFJLEVBQXhCO0FBQ0EsVUFBTWEsS0FBSyxHQUFHLElBQUlVLEdBQUosRUFBZDtBQUNBLFVBQU1YLE1BQVcsR0FBRyxFQUFwQjtBQUNBLFVBQU1ZLE1BQU0sR0FBR0MsSUFBSSxDQUFDQyxHQUFMLENBQVMsQ0FBVCxFQUFZQyxNQUFNLENBQUNMLElBQUksQ0FBQ0UsTUFBTixDQUFsQixDQUFmO0FBQ0EsVUFBTTlCLFVBQVUsR0FBRyxJQUFJRSxzQkFBSixDQUFlWSxVQUFmLENBQW5COztBQUNBLHdDQUFjYyxJQUFJLENBQUNYLEtBQW5COztBQUNBLDhDQUFvQixLQUFwQjs7QUFFQSxRQUFJaUIsWUFBSjs7QUFDQSxVQUFNVCxPQUFPLEdBQUcsTUFBeUI7QUFDdkMsVUFBSVMsWUFBWSxLQUFLLENBQUNBLFlBQVksQ0FBQ0MsTUFBZCxJQUF3QixLQUFLQSxNQUFsQyxDQUFoQixFQUEyRDtBQUN6RCxlQUFPRCxZQUFQO0FBQ0Q7O0FBRUQsYUFBT2xDLFVBQVUsQ0FBQ2EsU0FBWCxDQUFxQjtBQUMxQnVCLFFBQUFBLEtBQUssRUFBR0MsSUFBRCxJQUFXSCxZQUFZLEdBQUdHLElBRFA7QUFFMUI1QixRQUFBQSxJQUFJLEVBQUdRLEtBQUQsSUFBVztBQUNmLGNBQUksS0FBS2tCLE1BQVQsRUFBaUI7O0FBRWpCLDhDQUFjbEIsS0FBZDs7QUFFQSxjQUFJYSxNQUFKLEVBQVk7QUFDVlosWUFBQUEsTUFBTSxDQUFDb0IsSUFBUCxDQUFZckIsS0FBWjtBQUNBLGdCQUFJQyxNQUFNLENBQUNxQixNQUFQLEdBQWdCVCxNQUFwQixFQUE0QlosTUFBTSxDQUFDc0IsS0FBUDtBQUM3Qjs7QUFFREMsMkJBQU9DLHFCQUFQLENBQTZCLE1BQTdCLEVBQXFDekIsS0FBckMsRUFBNENFLEtBQTVDO0FBQ0QsU0FieUI7QUFjMUJILFFBQUFBLEtBQUssRUFBR0EsS0FBRCxJQUFXO0FBQ2hCLGNBQUksS0FBS21CLE1BQVQsRUFBaUI7QUFDZixrQkFBTTVCLEtBQUssR0FBR29DLHNCQUFhQyxHQUFiLEVBQWQ7O0FBQ0FyQyxZQUFBQSxLQUFLLENBQUNzQyxnQkFBTixDQUF1QjdCLEtBQXZCLEVBQThCa0IsWUFBOUI7QUFDRDs7QUFFRCxvREFBb0IsQ0FBQ2xCLEtBQUQsQ0FBcEI7O0FBQ0F5QiwyQkFBT0MscUJBQVAsQ0FBNkIsT0FBN0IsRUFBc0MxQixLQUF0QyxFQUE2Q0csS0FBN0M7QUFDRCxTQXRCeUI7QUF1QjFCVCxRQUFBQSxRQUFRLEVBQUUsTUFBTTtBQUNkLGNBQUksS0FBS3lCLE1BQVQsRUFBaUI7O0FBRWpCLG9EQUFvQixJQUFwQjs7QUFDQU0sMkJBQU9DLHFCQUFQLENBQTZCLFVBQTdCLEVBQXlDSSxTQUF6QyxFQUFvRDNCLEtBQXBEO0FBQ0Q7QUE1QnlCLE9BQXJCLENBQVA7QUE4QkQsS0FuQ0Q7O0FBcUNBLFFBQUlaLEtBQUosRUFBVztBQUNULFVBQUk7QUFDRixjQUFNd0MsUUFBUSxHQUFHeEMsS0FBSyxDQUFDd0MsUUFBdkI7O0FBQ0EsWUFBSSxDQUFDekIsb0JBQVVDLE9BQVYsQ0FBa0J3QixRQUFsQixDQUFMLEVBQWtDO0FBQ2hDQSxVQUFBQSxRQUFRLENBQUN2QixJQUFULENBQWNqQixLQUFkLEVBQXFCa0IsT0FBckI7QUFDRDtBQUNGLE9BTEQsQ0FLRSxPQUFPdUIsR0FBUCxFQUFZO0FBQ1osa0RBQW9CLENBQUNBLEdBQUQsQ0FBcEI7QUFDRDtBQUNGO0FBQ0Y7O0FBQ2UsTUFBTC9CLEtBQUssR0FBVTtBQUN4QixpQ0FBTyxJQUFQO0FBQ0Q7O0FBQ2dCLE1BQU5rQixNQUFNLEdBQVk7QUFDM0IsV0FBT2MsT0FBTyx1QkFBQyxJQUFELGdCQUFkO0FBQ0Q7O0FBQ0QseUJBQTRDO0FBQzFDLFdBQU8vQyx1QkFBV1MsSUFBWCxDQUFnQixJQUFoQixDQUFQO0FBQ0Q7O0FBdklIIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVzZS1iZWZvcmUtZGVmaW5lICovXG5pbXBvcnQgeyBQdXNoIH0gZnJvbSAnQGRlZmluaXRpb25zJztcbmltcG9ydCB7IEhvb2tzTWFuYWdlciB9IGZyb20gJy4uL2hlbHBlcnMnO1xuaW1wb3J0IHsgZnJvbSB9IGZyb20gJy4uL2NyZWF0b3JzL2Zyb20nO1xuaW1wb3J0IHsgSW52b2tlIH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICcuL09ic2VydmFibGUnO1xuaW1wb3J0IHsgTnVsbGFyeUZuLCBUeXBlR3VhcmQsIFVuYXJ5Rm4gfSBmcm9tICd0eXBlLWNvcmUnO1xuXG5leHBvcnQgZGVjbGFyZSBuYW1lc3BhY2UgTXVsdGljYXN0IHtcbiAgZXhwb3J0IGludGVyZmFjZSBPcHRpb25zPFU+IHtcbiAgICAvKiogU2V0cyBpbml0aWFsIGBtdWx0aWNhc3QudmFsdWVgOyBpdCB3b24ndCBiZSBlbWl0dGVkLiAqL1xuICAgIHZhbHVlPzogVTtcbiAgICByZXBsYXk/OiBib29sZWFuIHwgbnVtYmVyO1xuICB9XG4gIGV4cG9ydCBpbnRlcmZhY2UgSG9va3Mge1xuICAgIG9uQ3JlYXRlPzogVW5hcnlGbjxNdWx0aWNhc3QuQ29ubmVjdD47XG4gICAgb25TdWJzY3JpYmU/OiBVbmFyeUZuPE11bHRpY2FzdC5Db25uZWN0PjtcbiAgICBvblVuc3Vic2NyaWJlPzogVW5hcnlGbjxNdWx0aWNhc3QuQ29ubmVjdD47XG4gIH1cbiAgZXhwb3J0IHR5cGUgQ29ubmVjdCA9IE51bGxhcnlGbjxQdXNoLlN1YnNjcmlwdGlvbj47XG59XG5cbmV4cG9ydCBjbGFzcyBNdWx0aWNhc3Q8VCA9IGFueSwgVSBleHRlbmRzIFQgfCB2b2lkID0gVCB8IHZvaWQ+XG4gIGV4dGVuZHMgT2JzZXJ2YWJsZTxUPlxuICBpbXBsZW1lbnRzIFB1c2guTXVsdGljYXN0PFQsIFU+XG57XG4gIHB1YmxpYyBzdGF0aWMgb2Y8VD4oaXRlbTogVCk6IE11bHRpY2FzdDxULCBUPjtcbiAgcHVibGljIHN0YXRpYyBvZjxUPihcbiAgICBpdGVtOiBULFxuICAgIG9wdGlvbnM/OiBNdWx0aWNhc3QuT3B0aW9uczxUPixcbiAgICBob29rcz86IE11bHRpY2FzdC5Ib29rc1xuICApOiBNdWx0aWNhc3Q8VCwgVD47XG4gIHB1YmxpYyBzdGF0aWMgb2Y8VD4oaXRlbTogVCwgLi4uYXJnczogYW55W10pOiBNdWx0aWNhc3Q8VCwgVD4ge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBhcmdzWzBdO1xuICAgIGNvbnN0IGhvb2tzID0gYXJnc1sxXTtcblxuICAgIHJldHVybiBuZXcgdGhpczxULCBUPihcbiAgICAgIChvYnMpID0+IHtcbiAgICAgICAgb2JzLm5leHQoaXRlbSk7XG4gICAgICAgIG9icy5jb21wbGV0ZSgpO1xuICAgICAgfSxcbiAgICAgIG9wdGlvbnMsXG4gICAgICBob29rc1xuICAgICk7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBmcm9tPFQsIFUgZXh0ZW5kcyBUIHwgdm9pZCA9IFQgfCB2b2lkPihcbiAgICBpdGVtOiBQdXNoLkNvbnZlcnRpYmxlPFQ+LFxuICAgIG9wdGlvbnM/OiBNdWx0aWNhc3QuT3B0aW9uczxVPixcbiAgICBob29rcz86IE11bHRpY2FzdC5Ib29rc1xuICApOiBNdWx0aWNhc3Q8VCwgVT4ge1xuICAgIGlmIChpdGVtLmNvbnN0cnVjdG9yID09PSB0aGlzKSByZXR1cm4gaXRlbTtcblxuICAgIGNvbnN0IG9ic2VydmFibGUgPSBmcm9tKGl0ZW0pO1xuICAgIHJldHVybiBuZXcgdGhpczxULCBVPigob2JzKSA9PiBvYnNlcnZhYmxlLnN1YnNjcmliZShvYnMpLCBvcHRpb25zLCBob29rcyk7XG4gIH1cbiAgI3ZhbHVlOiBUIHwgVTtcbiAgI3Rlcm1pbmF0aW9uOiBib29sZWFuIHwgW0Vycm9yXTtcbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIHN1YnNjcmliZXI6IFB1c2guU3Vic2NyaWJlcjxUPixcbiAgICBvcHRpb25zPzogTXVsdGljYXN0Lk9wdGlvbnM8VT4sXG4gICAgaG9va3M/OiBNdWx0aWNhc3QuSG9va3NcbiAgKSB7XG4gICAgc3VwZXIoKG9icykgPT4ge1xuICAgICAgY29uc3QgdGVybWluYXRpb24gPSB0aGlzLiN0ZXJtaW5hdGlvbjtcbiAgICAgIGlmICh0ZXJtaW5hdGlvbikge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHRlcm1pbmF0aW9uID09PSAnYm9vbGVhbidcbiAgICAgICAgICA/IG9icy5jb21wbGV0ZSgpXG4gICAgICAgICAgOiBvYnMuZXJyb3IodGVybWluYXRpb25bMF0pO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgICBvYnMubmV4dCh2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIGl0ZW1zLmFkZChvYnMpO1xuXG4gICAgICBpZiAoaG9va3MpIHtcbiAgICAgICAgY29uc3Qgb25TdWJzY3JpYmUgPSBob29rcy5vblN1YnNjcmliZTtcbiAgICAgICAgaWYgKCFUeXBlR3VhcmQuaXNFbXB0eShvblN1YnNjcmliZSkpIHtcbiAgICAgICAgICBvblN1YnNjcmliZS5jYWxsKGhvb2tzLCBjb25uZWN0KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBpdGVtcy5kZWxldGUob2JzKTtcblxuICAgICAgICBpZiAoaG9va3MpIHtcbiAgICAgICAgICBjb25zdCBvblVuc3Vic2NyaWJlID0gaG9va3Mub25VbnN1YnNjcmliZTtcbiAgICAgICAgICBpZiAoIVR5cGVHdWFyZC5pc0VtcHR5KG9uVW5zdWJzY3JpYmUpKSB7XG4gICAgICAgICAgICBvblVuc3Vic2NyaWJlLmNhbGwoaG9va3MsIGNvbm5lY3QpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIGNvbnN0IG9wdHMgPSBvcHRpb25zIHx8IHt9O1xuICAgIGNvbnN0IGl0ZW1zID0gbmV3IFNldDxQdXNoLlN1YnNjcmlwdGlvbk9ic2VydmVyPFQ+PigpO1xuICAgIGNvbnN0IHZhbHVlczogVFtdID0gW107XG4gICAgY29uc3QgcmVwbGF5ID0gTWF0aC5tYXgoMCwgTnVtYmVyKG9wdHMucmVwbGF5KSk7XG4gICAgY29uc3Qgb2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlKHN1YnNjcmliZXIpO1xuICAgIHRoaXMuI3ZhbHVlID0gb3B0cy52YWx1ZSBhcyBVO1xuICAgIHRoaXMuI3Rlcm1pbmF0aW9uID0gZmFsc2U7XG5cbiAgICBsZXQgc3Vic2NyaXB0aW9uOiBhbnk7XG4gICAgY29uc3QgY29ubmVjdCA9ICgpOiBQdXNoLlN1YnNjcmlwdGlvbiA9PiB7XG4gICAgICBpZiAoc3Vic2NyaXB0aW9uICYmICghc3Vic2NyaXB0aW9uLmNsb3NlZCB8fCB0aGlzLmNsb3NlZCkpIHtcbiAgICAgICAgcmV0dXJuIHN1YnNjcmlwdGlvbjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9ic2VydmFibGUuc3Vic2NyaWJlKHtcbiAgICAgICAgc3RhcnQ6IChzdWJzKSA9PiAoc3Vic2NyaXB0aW9uID0gc3VicyksXG4gICAgICAgIG5leHQ6ICh2YWx1ZSkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLmNsb3NlZCkgcmV0dXJuO1xuXG4gICAgICAgICAgdGhpcy4jdmFsdWUgPSB2YWx1ZTtcblxuICAgICAgICAgIGlmIChyZXBsYXkpIHtcbiAgICAgICAgICAgIHZhbHVlcy5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgIGlmICh2YWx1ZXMubGVuZ3RoID4gcmVwbGF5KSB2YWx1ZXMuc2hpZnQoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBJbnZva2Uuc3Vic2NyaXB0aW9uT2JzZXJ2ZXJzKCduZXh0JywgdmFsdWUsIGl0ZW1zKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgY29uc3QgaG9va3MgPSBIb29rc01hbmFnZXIuZ2V0KCk7XG4gICAgICAgICAgICBob29rcy5vblVuaGFuZGxlZEVycm9yKGVycm9yLCBzdWJzY3JpcHRpb24pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuI3Rlcm1pbmF0aW9uID0gW2Vycm9yXTtcbiAgICAgICAgICBJbnZva2Uuc3Vic2NyaXB0aW9uT2JzZXJ2ZXJzKCdlcnJvcicsIGVycm9yLCBpdGVtcyk7XG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSByZXR1cm47XG5cbiAgICAgICAgICB0aGlzLiN0ZXJtaW5hdGlvbiA9IHRydWU7XG4gICAgICAgICAgSW52b2tlLnN1YnNjcmlwdGlvbk9ic2VydmVycygnY29tcGxldGUnLCB1bmRlZmluZWQsIGl0ZW1zKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGlmIChob29rcykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgb25DcmVhdGUgPSBob29rcy5vbkNyZWF0ZTtcbiAgICAgICAgaWYgKCFUeXBlR3VhcmQuaXNFbXB0eShvbkNyZWF0ZSkpIHtcbiAgICAgICAgICBvbkNyZWF0ZS5jYWxsKGhvb2tzLCBjb25uZWN0KTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMuI3Rlcm1pbmF0aW9uID0gW2VyciBhcyBFcnJvcl07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXQgdmFsdWUoKTogVCB8IFUge1xuICAgIHJldHVybiB0aGlzLiN2YWx1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGNsb3NlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQm9vbGVhbih0aGlzLiN0ZXJtaW5hdGlvbik7XG4gIH1cbiAgcHVibGljIFtTeW1ib2wub2JzZXJ2YWJsZV0oKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIE9ic2VydmFibGUuZnJvbSh0aGlzKTtcbiAgfVxufVxuIl19
;