UNPKG

multitude

Version:

Comprehensive streams for push and pull

181 lines (130 loc) 16.5 kB
"use strict"; 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wdXNoL2NsYXNzZXMvTXVsdGljYXN0LnRzIl0sIm5hbWVzIjpbIlN5bWJvbCIsIm9ic2VydmFibGUiLCJNdWx0aWNhc3QiLCJPYnNlcnZhYmxlIiwib2YiLCJpdGVtIiwiYXJncyIsIm9wdGlvbnMiLCJob29rcyIsIm9icyIsIm5leHQiLCJjb21wbGV0ZSIsImZyb20iLCJjb25zdHJ1Y3RvciIsInN1YnNjcmliZSIsInN1YnNjcmliZXIiLCJ0ZXJtaW5hdGlvbiIsImVycm9yIiwidmFsdWUiLCJ2YWx1ZXMiLCJpdGVtcyIsImFkZCIsIm9uU3Vic2NyaWJlIiwiVHlwZUd1YXJkIiwiaXNFbXB0eSIsImNhbGwiLCJjb25uZWN0IiwiZGVsZXRlIiwib25VbnN1YnNjcmliZSIsIm9wdHMiLCJTZXQiLCJyZXBsYXkiLCJNYXRoIiwibWF4IiwiTnVtYmVyIiwic3Vic2NyaXB0aW9uIiwiY2xvc2VkIiwic3RhcnQiLCJzdWJzIiwicHVzaCIsImxlbmd0aCIsInNoaWZ0IiwiSW52b2tlIiwic3Vic2NyaXB0aW9uT2JzZXJ2ZXJzIiwiSG9va3NNYW5hZ2VyIiwiZ2V0Iiwib25VbmhhbmRsZWRFcnJvciIsInVuZGVmaW5lZCIsIm9uQ3JlYXRlIiwiZXJyIiwiQm9vbGVhbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O3FCQXdKVUEsTUFBTSxDQUFDQyxVOztBQXhJVixNQUFNQyxTQUFOLFNBQ0dDLHNCQURILENBR1A7QUFPa0IsU0FBRkMsRUFBRSxDQUFJQyxJQUFKLEVBQWEsR0FBR0MsSUFBaEIsRUFBOEM7QUFDNUQsVUFBTUMsT0FBTyxHQUFHRCxJQUFJLENBQUMsQ0FBRCxDQUFwQjtBQUNBLFVBQU1FLEtBQUssR0FBR0YsSUFBSSxDQUFDLENBQUQsQ0FBbEI7QUFFQSxXQUFPLElBQUksSUFBSixDQUNKRyxHQUFELElBQVM7QUFDUEEsTUFBQUEsR0FBRyxD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R0FBUCxFQUFZO0FBQ1osa0RBQW9CLENBQUNBLEdBQUQsQ0FBcEI7QUFDRDtBQUNGO0FBQ0Y7O0FBQ2UsTUFBTC9CLEtBQUssR0FBVTtBQUN4QixpQ0FBTyxJQUFQO0FBQ0Q7O0FBQ2dCLE1BQU5rQixNQUFNLEdBQVk7QUFDM0IsV0FBT2MsT0FBTyx1QkFBQyxJQUFELGdCQUFkO0FBQ0Q7O0FBQ0QseUJBQTRDO0FBQzFDLFdBQU8vQyx1QkFBV1MsSUFBWCxDQUFnQixJQUFoQixDQUFQO0FBQ0Q7O0FBdklIIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVzZS1iZWZvcmUtZGVmaW5lICovXG5pbXBvcnQgeyBQdXNoIH0gZnJvbSAnQGRlZmluaXRpb25zJztcbmltcG9ydCB7IEhvb2tzTWFuYWdlciB9IGZyb20gJy4uL2hlbHBlcnMnO1xuaW1wb3J0IHsgZnJvbSB9IGZyb20gJy4uL2NyZWF0b3JzL2Zyb20nO1xuaW1wb3J0IHsgSW52b2tlIH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICcuL09ic2VydmFibGUnO1xuaW1wb3J0IHsgTnVsbGFyeUZuLCBUeXBlR3VhcmQsIFVuYXJ5Rm4gfSBmcm9tICd0eXBlLWNvcmUnO1xuXG5leHBvcnQgZGVjbGFyZSBuYW1lc3BhY2UgTXVsdGljYXN0IHtcbiAgZXhwb3J0IGludGVyZmFjZSBPcHRpb25zPFU+IHtcbiAgICAvKiogU2V0cyBpbml0aWFsIGBtdWx0aWNhc3QudmFsdWVgOyBpdCB3b24ndCBiZSBlbWl0dGVkLiAqL1xuICAgIHZhbHVlPzogVTtcbiAgICByZXBsYXk/OiBib29sZWFuIHwgbnVtYmVyO1xuICB9XG4gIGV4cG9ydCBpbnRlcmZhY2UgSG9va3Mge1xuICAgIG9uQ3JlYXRlPzogVW5hcnlGbjxNdWx0aWNhc3QuQ29ubmVjdD47XG4gICAgb25TdWJzY3JpYmU/OiBVbmFyeUZuPE11bHRpY2FzdC5Db25uZWN0PjtcbiAgICBvblVuc3Vic2NyaWJlPzogVW5hcnlGbjxNdWx0aWNhc3QuQ29ubmVjdD47XG4gIH1cbiAgZXhwb3J0IHR5cGUgQ29ubmVjdCA9IE51bGxhcnlGbjxQdXNoLlN1YnNjcmlwdGlvbj47XG59XG5cbmV4cG9ydCBjbGFzcyBNdWx0aWNhc3Q8VCA9IGFueSwgVSBleHRlbmRzIFQgfCB2b2lkID0gVCB8IHZvaWQ+XG4gIGV4dGVuZHMgT2JzZXJ2YWJsZTxUPlxuICBpbXBsZW1lbnRzIFB1c2guTXVsdGljYXN0PFQsIFU+XG57XG4gIHB1YmxpYyBzdGF0aWMgb2Y8VD4oaXRlbTogVCk6IE11bHRpY2FzdDxULCBUPjtcbiAgcHVibGljIHN0YXRpYyBvZjxUPihcbiAgICBpdGVtOiBULFxuICAgIG9wdGlvbnM/OiBNdWx0aWNhc3QuT3B0aW9uczxUPixcbiAgICBob29rcz86IE11bHRpY2FzdC5Ib29rc1xuICApOiBNdWx0aWNhc3Q8VCwgVD47XG4gIHB1YmxpYyBzdGF0aWMgb2Y8VD4oaXRlbTogVCwgLi4uYXJnczogYW55W10pOiBNdWx0aWNhc3Q8VCwgVD4ge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBhcmdzWzBdO1xuICAgIGNvbnN0IGhvb2tzID0gYXJnc1sxXTtcblxuICAgIHJldHVybiBuZXcgdGhpczxULCBUPihcbiAgICAgIChvYnMpID0+IHtcbiAgICAgICAgb2JzLm5leHQoaXRlbSk7XG4gICAgICAgIG9icy5jb21wbGV0ZSgpO1xuICAgICAgfSxcbiAgICAgIG9wdGlvbnMsXG4gICAgICBob29rc1xuICAgICk7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBmcm9tPFQsIFUgZXh0ZW5kcyBUIHwgdm9pZCA9IFQgfCB2b2lkPihcbiAgICBpdGVtOiBQdXNoLkNvbnZlcnRpYmxlPFQ+LFxuICAgIG9wdGlvbnM/OiBNdWx0aWNhc3QuT3B0aW9uczxVPixcbiAgICBob29rcz86IE11bHRpY2FzdC5Ib29rc1xuICApOiBNdWx0aWNhc3Q8VCwgVT4ge1xuICAgIGlmIChpdGVtLmNvbnN0cnVjdG9yID09PSB0aGlzKSByZXR1cm4gaXRlbTtcblxuICAgIGNvbnN0IG9ic2VydmFibGUgPSBmcm9tKGl0ZW0pO1xuICAgIHJldHVybiBuZXcgdGhpczxULCBVPigob2JzKSA9PiBvYnNlcnZhYmxlLnN1YnNjcmliZShvYnMpLCBvcHRpb25zLCBob29rcyk7XG4gIH1cbiAgI3ZhbHVlOiBUIHwgVTtcbiAgI3Rlcm1pbmF0aW9uOiBib29sZWFuIHwgW0Vycm9yXTtcbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIHN1YnNjcmliZXI6IFB1c2guU3Vic2NyaWJlcjxUPixcbiAgICBvcHRpb25zPzogTXVsdGljYXN0Lk9wdGlvbnM8VT4sXG4gICAgaG9va3M/OiBNdWx0aWNhc3QuSG9va3NcbiAgKSB7XG4gICAgc3VwZXIoKG9icykgPT4ge1xuICAgICAgY29uc3QgdGVybWluYXRpb24gPSB0aGlzLiN0ZXJtaW5hdGlvbjtcbiAgICAgIGlmICh0ZXJtaW5hdGlvbikge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHRlcm1pbmF0aW9uID09PSAnYm9vbGVhbidcbiAgICAgICAgICA/IG9icy5jb21wbGV0ZSgpXG4gICAgICAgICAgOiBvYnMuZXJyb3IodGVybWluYXRpb25bMF0pO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgICBvYnMubmV4dCh2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIGl0ZW1zLmFkZChvYnMpO1xuXG4gICAgICBpZiAoaG9va3MpIHtcbiAgICAgICAgY29uc3Qgb25TdWJzY3JpYmUgPSBob29rcy5vblN1YnNjcmliZTtcbiAgICAgICAgaWYgKCFUeXBlR3VhcmQuaXNFbXB0eShvblN1YnNjcmliZSkpIHtcbiAgICAgICAgICBvblN1YnNjcmliZS5jYWxsKGhvb2tzLCBjb25uZWN0KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBpdGVtcy5kZWxldGUob2JzKTtcblxuICAgICAgICBpZiAoaG9va3MpIHtcbiAgICAgICAgICBjb25zdCBvblVuc3Vic2NyaWJlID0gaG9va3Mub25VbnN1YnNjcmliZTtcbiAgICAgICAgICBpZiAoIVR5cGVHdWFyZC5pc0VtcHR5KG9uVW5zdWJzY3JpYmUpKSB7XG4gICAgICAgICAgICBvblVuc3Vic2NyaWJlLmNhbGwoaG9va3MsIGNvbm5lY3QpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIGNvbnN0IG9wdHMgPSBvcHRpb25zIHx8IHt9O1xuICAgIGNvbnN0IGl0ZW1zID0gbmV3IFNldDxQdXNoLlN1YnNjcmlwdGlvbk9ic2VydmVyPFQ+PigpO1xuICAgIGNvbnN0IHZhbHVlczogVFtdID0gW107XG4gICAgY29uc3QgcmVwbGF5ID0gTWF0aC5tYXgoMCwgTnVtYmVyKG9wdHMucmVwbGF5KSk7XG4gICAgY29uc3Qgb2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlKHN1YnNjcmliZXIpO1xuICAgIHRoaXMuI3ZhbHVlID0gb3B0cy52YWx1ZSBhcyBVO1xuICAgIHRoaXMuI3Rlcm1pbmF0aW9uID0gZmFsc2U7XG5cbiAgICBsZXQgc3Vic2NyaXB0aW9uOiBhbnk7XG4gICAgY29uc3QgY29ubmVjdCA9ICgpOiBQdXNoLlN1YnNjcmlwdGlvbiA9PiB7XG4gICAgICBpZiAoc3Vic2NyaXB0aW9uICYmICghc3Vic2NyaXB0aW9uLmNsb3NlZCB8fCB0aGlzLmNsb3NlZCkpIHtcbiAgICAgICAgcmV0dXJuIHN1YnNjcmlwdGlvbjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9ic2VydmFibGUuc3Vic2NyaWJlKHtcbiAgICAgICAgc3RhcnQ6IChzdWJzKSA9PiAoc3Vic2NyaXB0aW9uID0gc3VicyksXG4gICAgICAgIG5leHQ6ICh2YWx1ZSkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLmNsb3NlZCkgcmV0dXJuO1xuXG4gICAgICAgICAgdGhpcy4jdmFsdWUgPSB2YWx1ZTtcblxuICAgICAgICAgIGlmIChyZXBsYXkpIHtcbiAgICAgICAgICAgIHZhbHVlcy5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgIGlmICh2YWx1ZXMubGVuZ3RoID4gcmVwbGF5KSB2YWx1ZXMuc2hpZnQoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBJbnZva2Uuc3Vic2NyaXB0aW9uT2JzZXJ2ZXJzKCduZXh0JywgdmFsdWUsIGl0ZW1zKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgY29uc3QgaG9va3MgPSBIb29rc01hbmFnZXIuZ2V0KCk7XG4gICAgICAgICAgICBob29rcy5vblVuaGFuZGxlZEVycm9yKGVycm9yLCBzdWJzY3JpcHRpb24pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuI3Rlcm1pbmF0aW9uID0gW2Vycm9yXTtcbiAgICAgICAgICBJbnZva2Uuc3Vic2NyaXB0aW9uT2JzZXJ2ZXJzKCdlcnJvcicsIGVycm9yLCBpdGVtcyk7XG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSByZXR1cm47XG5cbiAgICAgICAgICB0aGlzLiN0ZXJtaW5hdGlvbiA9IHRydWU7XG4gICAgICAgICAgSW52b2tlLnN1YnNjcmlwdGlvbk9ic2VydmVycygnY29tcGxldGUnLCB1bmRlZmluZWQsIGl0ZW1zKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGlmIChob29rcykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgb25DcmVhdGUgPSBob29rcy5vbkNyZWF0ZTtcbiAgICAgICAgaWYgKCFUeXBlR3VhcmQuaXNFbXB0eShvbkNyZWF0ZSkpIHtcbiAgICAgICAgICBvbkNyZWF0ZS5jYWxsKGhvb2tzLCBjb25uZWN0KTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMuI3Rlcm1pbmF0aW9uID0gW2VyciBhcyBFcnJvcl07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXQgdmFsdWUoKTogVCB8IFUge1xuICAgIHJldHVybiB0aGlzLiN2YWx1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGNsb3NlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQm9vbGVhbih0aGlzLiN0ZXJtaW5hdGlvbik7XG4gIH1cbiAgcHVibGljIFtTeW1ib2wub2JzZXJ2YWJsZV0oKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIE9ic2VydmFibGUuZnJvbSh0aGlzKTtcbiAgfVxufVxuIl19