multitude
Version:
Comprehensive streams for push and pull
104 lines (73 loc) • 8.56 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.Subscription = void 0;
var _helpers = require("../../../helpers");
var _teardown2 = require("../../utils/teardown");
var _helpers2 = require("../helpers");
var _SubscriptionObserver = require("./SubscriptionObserver");
var _Hooks = require("./Hooks");
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 _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "get"); return _classApplyDescriptorGet(receiver, descriptor); }
function _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }
function _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "set"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }
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 _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; } }
var _teardown = /*#__PURE__*/new WeakMap();
var _hooks = /*#__PURE__*/new WeakMap();
class Subscription {
constructor(observer, subscriber, ...hooks) {
_classPrivateFieldInitSpec(this, _teardown, {
writable: true,
value: void 0
});
_classPrivateFieldInitSpec(this, _hooks, {
writable: true,
value: void 0
});
_classPrivateFieldSet(this, _teardown, null);
_classPrivateFieldSet(this, _hooks, _Hooks.Hooks.from(hooks[0]));
_helpers2.SubscriptionManager.setObserver(this, observer);
_helpers2.Invoke.observer('start', this, this, _classPrivateFieldGet(this, _hooks));
if (_helpers2.SubscriptionManager.isClosed(this)) return;
const subscriptionObserver = new _SubscriptionObserver.SubscriptionObserver(this, hooks[0]);
let fn = _helpers.Handler.noop;
try {
const unsubscribe = subscriber(subscriptionObserver);
fn = (0, _teardown2.teardown)(unsubscribe);
} catch (err) {
subscriptionObserver.error(err);
} finally {
if (_helpers2.SubscriptionManager.isClosed(this)) {
try {
fn();
} catch (err) {
_classPrivateFieldGet(this, _hooks).onUnhandledError(err, this);
}
} else {
_classPrivateFieldSet(this, _teardown, fn);
}
}
}
get closed() {
return _helpers2.SubscriptionManager.isClosed(this);
}
unsubscribe() {
if (!_helpers2.SubscriptionManager.isClosed(this)) {
_helpers2.SubscriptionManager.close(this);
}
const teardown = _classPrivateFieldGet(this, _teardown);
if (!teardown) return;
_classPrivateFieldSet(this, _teardown, null);
try {
teardown();
} catch (err) {
_classPrivateFieldGet(this, _hooks).onUnhandledError(err, this);
}
}
}
exports.Subscription = Subscription;
Subscription.prototype.constructor = Object;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9wdXNoL2NsYXNzZXMvYXNzaXN0YW5jZS9TdWJzY3JpcHRpb24udHMiXSwibmFtZXMiOlsiU3Vic2NyaXB0aW9uIiwiY29uc3RydWN0b3IiLCJvYnNlcnZlciIsInN1YnNjcmliZXIiLCJob29rcyIsIkhvb2tzIiwiZnJvbSIsIlN1YnNjcmlwdGlvbk1hbmFnZXIiLCJzZXRPYnNlcnZlciIsIkludm9rZSIsImlzQ2xvc2VkIiwic3Vic2NyaXB0aW9uT2JzZXJ2ZXIiLCJTdWJzY3JpcHRpb25PYnNlcnZlciIsImZuIiwiSGFuZGxlciIsIm5vb3AiLCJ1bnN1YnNjcmliZSIsImVyciIsImVycm9yIiwib25VbmhhbmRsZWRFcnJvciIsImNsb3NlZCIsImNsb3NlIiwidGVhcmRvd24iLCJwcm90b3R5cGUiLCJPYmplY3QiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHQSxNQUFNQSxZQUFOLENBQXlEO0FBR2hEQyxFQUFBQSxXQUFXLENBQ2hCQyxRQURnQixFQUVoQkMsVUFGZ0IsRUFHaEIsR0FBR0MsS0FIYSxFQUloQjtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUNBLDJDQUFpQixJQUFqQjs7QUFDQSx3Q0FBY0MsYUFBTUMsSUFBTixDQUFXRixLQUFLLENBQUMsQ0FBRCxDQUFoQixDQUFkOztBQUNBRyxrQ0FBb0JDLFdBQXBCLENBQWdDLElBQWhDLEVBQXNDTixRQUF0Qzs7QUFFQU8scUJBQU9QLFFBQVAsQ0FBZ0IsT0FBaEIsRUFBeUIsSUFBekIsRUFBK0IsSUFBL0Isd0JBQXFDLElBQXJDOztBQUNBLFFBQUlLLDhCQUFvQkcsUUFBcEIsQ0FBNkIsSUFBN0IsQ0FBSixFQUF3QztBQUV4QyxVQUFNQyxvQkFBb0IsR0FBRyxJQUFJQywwQ0FBSixDQUF5QixJQUF6QixFQUErQlIsS0FBSyxDQUFDLENBQUQsQ0FBcEMsQ0FBN0I7QUFFQSxRQUFJUyxFQUFhLEdBQUdDLGlCQUFRQyxJQUE1Qjs7QUFDQSxRQUFJO0FBQ0YsWUFBTUMsV0FBVyxHQUFHYixVQUFVLENBQUNRLG9CQUFELENBQTlCO0FBQ0FFLE1BQUFBLEVBQUUsR0FBRyx5QkFBU0csV0FBVCxDQUFMO0FBQ0QsS0FIRCxDQUdFLE9BQU9DLEdBQVAsRUFBWTtBQUNaTixNQUFBQSxvQkFBb0IsQ0FBQ08sS0FBckIsQ0FBMkJELEdBQTNCO0FBQ0QsS0FMRCxTQUtVO0FBQ1IsVUFBSVYsOEJBQW9CRyxRQUFwQixDQUE2QixJQUE3QixDQUFKLEVBQXdDO0FBQ3RDLFlBQUk7QUFDRkcsVUFBQUEsRUFBRTtBQUNILFNBRkQsQ0FFRSxPQUFPSSxHQUFQLEVBQVk7QUFDWiw4Q0FBWUUsZ0JBQVosQ0FBNkJGLEdBQTdCLEVBQTJDLElBQTNDO0FBQ0Q7QUFDRixPQU5ELE1BTU87QUFDTCwrQ0FBaUJKLEVBQWpCO0FBQ0Q7QUFDRjtBQUNGOztBQUNnQixNQUFOTyxNQUFNLEdBQVk7QUFDM0IsV0FBT2IsOEJBQW9CRyxRQUFwQixDQUE2QixJQUE3QixDQUFQO0FBQ0Q7O0FBQ01NLEVBQUFBLFdBQVcsR0FBUztBQUN6QixRQUFJLENBQUNULDhCQUFvQkcsUUFBcEIsQ0FBNkIsSUFBN0IsQ0FBTCxFQUF5QztBQUN2Q0gsb0NBQW9CYyxLQUFwQixDQUEwQixJQUExQjtBQUNEOztBQUVELFVBQU1DLFFBQVEseUJBQUcsSUFBSCxZQUFkOztBQUNBLFFBQUksQ0FBQ0EsUUFBTCxFQUFlOztBQUVmLDJDQUFpQixJQUFqQjs7QUFDQSxRQUFJO0FBQ0ZBLE1BQUFBLFFBQVE7QUFDVCxLQUZELENBRUUsT0FBT0wsR0FBUCxFQUFZO0FBQ1osMENBQVlFLGdCQUFaLENBQTZCRixHQUE3QixFQUEyQyxJQUEzQztBQUNEO0FBQ0Y7O0FBcERzRDs7O0FBdUR6RGpCLFlBQVksQ0FBQ3VCLFNBQWIsQ0FBdUJ0QixXQUF2QixHQUFxQ3VCLE1BQXJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUHVzaCB9IGZyb20gJ0BkZWZpbml0aW9ucyc7XG5pbXBvcnQgeyBIYW5kbGVyIH0gZnJvbSAnQGhlbHBlcnMnO1xuaW1wb3J0IHsgdGVhcmRvd24gfSBmcm9tICcuLi8uLi91dGlscy90ZWFyZG93bic7XG5pbXBvcnQgeyBJbnZva2UsIFN1YnNjcmlwdGlvbk1hbmFnZXIgfSBmcm9tICcuLi9oZWxwZXJzJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbk9ic2VydmVyIH0gZnJvbSAnLi9TdWJzY3JpcHRpb25PYnNlcnZlcic7XG5pbXBvcnQgeyBIb29rcyB9IGZyb20gJy4vSG9va3MnO1xuaW1wb3J0IHsgTnVsbGFyeUZuLCBFbXB0eSB9IGZyb20gJ3R5cGUtY29yZSc7XG5cbmNsYXNzIFN1YnNjcmlwdGlvbjxUID0gYW55PiBpbXBsZW1lbnRzIFB1c2guU3Vic2NyaXB0aW9uIHtcbiAgI3RlYXJkb3duOiBOdWxsYXJ5Rm4gfCBudWxsO1xuICAjaG9va3M6IEhvb2tzPFQ+O1xuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgb2JzZXJ2ZXI6IFB1c2guT2JzZXJ2ZXI8VD4sXG4gICAgc3Vic2NyaWJlcjogUHVzaC5TdWJzY3JpYmVyPFQ+LFxuICAgIC4uLmhvb2tzOiBbXSB8IFtQdXNoLkhvb2tzPFQ+IHwgRW1wdHldXG4gICkge1xuICAgIHRoaXMuI3RlYXJkb3duID0gbnVsbDtcbiAgICB0aGlzLiNob29rcyA9IEhvb2tzLmZyb20oaG9va3NbMF0pO1xuICAgIFN1YnNjcmlwdGlvbk1hbmFnZXIuc2V0T2JzZXJ2ZXIodGhpcywgb2JzZXJ2ZXIpO1xuXG4gICAgSW52b2tlLm9ic2VydmVyKCdzdGFydCcsIHRoaXMsIHRoaXMsIHRoaXMuI2hvb2tzKTtcbiAgICBpZiAoU3Vic2NyaXB0aW9uTWFuYWdlci5pc0Nsb3NlZCh0aGlzKSkgcmV0dXJuO1xuXG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uT2JzZXJ2ZXIgPSBuZXcgU3Vic2NyaXB0aW9uT2JzZXJ2ZXIodGhpcywgaG9va3NbMF0pO1xuXG4gICAgbGV0IGZuOiBOdWxsYXJ5Rm4gPSBIYW5kbGVyLm5vb3A7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHVuc3Vic2NyaWJlID0gc3Vic2NyaWJlcihzdWJzY3JpcHRpb25PYnNlcnZlcik7XG4gICAgICBmbiA9IHRlYXJkb3duKHVuc3Vic2NyaWJlKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHN1YnNjcmlwdGlvbk9ic2VydmVyLmVycm9yKGVyciBhcyBFcnJvcik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChTdWJzY3JpcHRpb25NYW5hZ2VyLmlzQ2xvc2VkKHRoaXMpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZm4oKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgdGhpcy4jaG9va3Mub25VbmhhbmRsZWRFcnJvcihlcnIgYXMgRXJyb3IsIHRoaXMpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLiN0ZWFyZG93biA9IGZuO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0IGNsb3NlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gU3Vic2NyaXB0aW9uTWFuYWdlci5pc0Nsb3NlZCh0aGlzKTtcbiAgfVxuICBwdWJsaWMgdW5zdWJzY3JpYmUoKTogdm9pZCB7XG4gICAgaWYgKCFTdWJzY3JpcHRpb25NYW5hZ2VyLmlzQ2xvc2VkKHRoaXMpKSB7XG4gICAgICBTdWJzY3JpcHRpb25NYW5hZ2VyLmNsb3NlKHRoaXMpO1xuICAgIH1cblxuICAgIGNvbnN0IHRlYXJkb3duID0gdGhpcy4jdGVhcmRvd247XG4gICAgaWYgKCF0ZWFyZG93bikgcmV0dXJuO1xuXG4gICAgdGhpcy4jdGVhcmRvd24gPSBudWxsO1xuICAgIHRyeSB7XG4gICAgICB0ZWFyZG93bigpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy4jaG9va3Mub25VbmhhbmRsZWRFcnJvcihlcnIgYXMgRXJyb3IsIHRoaXMpO1xuICAgIH1cbiAgfVxufVxuXG5TdWJzY3JpcHRpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gT2JqZWN0O1xuXG5leHBvcnQgeyBTdWJzY3JpcHRpb24gfTtcbiJdfQ==
;