UNPKG

multitude

Version:

Comprehensive streams for push and pull

76 lines (60 loc) 8.54 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Invoke = void 0; var _SubscriptionManager = require("./SubscriptionManager"); var _typeCore = require("type-core"); const $empty = Symbol('empty'); class Invoke { static method(obj, key, payload, onEmpty) { if (!obj) return; let method = $empty; try { method = obj[key]; payload ? method.call(obj, ...payload) : method.call(obj); } catch (err) { if (_typeCore.TypeGuard.isEmpty(method)) onEmpty && onEmpty();else throw err; } } static observer(action, payload, subscription, hooks) { if (_SubscriptionManager.SubscriptionManager.isClosed(subscription)) { if (action === 'error') hooks.onUnhandledError(payload, subscription); return; } const observer = _SubscriptionManager.SubscriptionManager.getObserver(subscription); if (action !== 'start') _SubscriptionManager.SubscriptionManager.close(subscription); try { this.method(observer, action, action === 'complete' ? null : [payload], action === 'error' ? () => hooks.onUnhandledError(payload, subscription) : null); } catch (err) { hooks.onUnhandledError(err, subscription); } finally { if (action !== 'start') { try { subscription.unsubscribe(); } catch (err) { hooks.onUnhandledError(err, subscription); } } } } static observers(action, payload, items, options) { for (const item of items) { let method = $empty; try { method = item[action]; method.call(item, payload); } catch (err) { if (_typeCore.TypeGuard.isEmpty(method)) continue;else if (options.onError) options.onError(err); } if (!options.multicast) break; } } static subscriptionObservers(action, payload, items) { for (const item of items) { item[action](payload); } } } exports.Invoke = Invoke; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9wdXNoL2NsYXNzZXMvaGVscGVycy9JbnZva2UudHMiXSwibmFtZXMiOlsiJGVtcHR5IiwiU3ltYm9sIiwiSW52b2tlIiwibWV0aG9kIiwib2JqIiwia2V5IiwicGF5bG9hZCIsIm9uRW1wdHkiLCJjYWxsIiwiZXJyIiwiVHlwZUd1YXJkIiwiaXNFbXB0eSIsIm9ic2VydmVyIiwiYWN0aW9uIiwic3Vic2NyaXB0aW9uIiwiaG9va3MiLCJTdWJzY3JpcHRpb25NYW5hZ2VyIiwiaXNDbG9zZWQiLCJvblVuaGFuZGxlZEVycm9yIiwiZ2V0T2JzZXJ2ZXIiLCJjbG9zZSIsInVuc3Vic2NyaWJlIiwib2JzZXJ2ZXJzIiwiaXRlbXMiLCJvcHRpb25zIiwiaXRlbSIsIm9uRXJyb3IiLCJtdWx0aWNhc3QiLCJzdWJzY3JpcHRpb25PYnNlcnZlcnMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFFQTs7QUFDQTs7QUFFQSxNQUFNQSxNQUFNLEdBQUdDLE1BQU0sQ0FBQyxPQUFELENBQXJCOztBQUVPLE1BQU1DLE1BQU4sQ0FBYTtBQUNFLFNBQU5DLE1BQU0sQ0FDbEJDLEdBRGtCLEVBRWxCQyxHQUZrQixFQUdsQkMsT0FIa0IsRUFJbEJDLE9BSmtCLEVBS1o7QUFDTixRQUFJLENBQUNILEdBQUwsRUFBVTtBQUNWLFFBQUlELE1BQVcsR0FBR0gsTUFBbEI7O0FBQ0EsUUFBSTtBQUNGRyxNQUFBQSxNQUFNLEdBQUlDLEdBQUQsQ0FBYUMsR0FBYixDQUFUO0FBQ0FDLE1BQUFBLE9BQU8sR0FBR0gsTUFBTSxDQUFDSyxJQUFQLENBQVlKLEdBQVosRUFBaUIsR0FBR0UsT0FBcEIsQ0FBSCxHQUFrQ0gsTUFBTSxDQUFDSyxJQUFQLENBQVlKLEdBQVosQ0FBekM7QUFDRCxLQUhELENBR0UsT0FBT0ssR0FBUCxFQUFZO0FBQ1osVUFBSUMsb0JBQVVDLE9BQVYsQ0FBa0JSLE1BQWxCLENBQUosRUFBK0JJLE9BQU8sSUFBSUEsT0FBTyxFQUFsQixDQUEvQixLQUNLLE1BQU1FLEdBQU47QUFDTjtBQUNGOztBQUNxQixTQUFSRyxRQUFRLENBQ3BCQyxNQURvQixFQUVwQlAsT0FGb0IsRUFHcEJRLFlBSG9CLEVBSXBCQyxLQUpvQixFQUtkO0FBQ04sUUFBSUMseUNBQW9CQyxRQUFwQixDQUE2QkgsWUFBN0IsQ0FBSixFQUFnRDtBQUM5QyxVQUFJRCxNQUFNLEtBQUssT0FBZixFQUF3QkUsS0FBSyxDQUFDRyxnQkFBTixDQUF1QlosT0FBdkIsRUFBZ0NRLFlBQWhDO0FBQ3hCO0FBQ0Q7O0FBRUQsVUFBTUYsUUFBUSxHQUFHSSx5Q0FBb0JHLFdBQXBCLENBQWdDTCxZQUFoQyxDQUFqQjs7QUFDQSxRQUFJRCxNQUFNLEtBQUssT0FBZixFQUF3QkcseUNBQW9CSSxLQUFwQixDQUEwQk4sWUFBMUI7O0FBRXhCLFFBQUk7QUFDRixXQUFLWCxNQUFMLENBQ0VTLFFBREYsRUFFRUMsTUFGRixFQUdFQSxNQUFNLEtBQUssVUFBWCxHQUF3QixJQUF4QixHQUErQixDQUFDUCxPQUFELENBSGpDLEVBSUVPLE1BQU0sS0FBSyxPQUFYLEdBQ0ksTUFBTUUsS0FBSyxDQUFDRyxnQkFBTixDQUF1QlosT0FBdkIsRUFBZ0NRLFlBQWhDLENBRFYsR0FFSSxJQU5OO0FBUUQsS0FURCxDQVNFLE9BQU9MLEdBQVAsRUFBWTtBQUNaTSxNQUFBQSxLQUFLLENBQUNHLGdCQUFOLENBQXVCVCxHQUF2QixFQUFxQ0ssWUFBckM7QUFDRCxLQVhELFNBV1U7QUFDUixVQUFJRCxNQUFNLEtBQUssT0FBZixFQUF3QjtBQUN0QixZQUFJO0FBQ0ZDLFVBQUFBLFlBQVksQ0FBQ08sV0FBYjtBQUNELFNBRkQsQ0FFRSxPQUFPWixHQUFQLEVBQVk7QUFDWk0sVUFBQUEsS0FBSyxDQUFDRyxnQkFBTixDQUF1QlQsR0FBdkIsRUFBcUNLLFlBQXJDO0FBQ0Q7QUFDRjtBQUNGO0FBQ0Y7O0FBQ3NCLFNBQVRRLFNBQVMsQ0FDckJULE1BRHFCLEVBRXJCUCxPQUZxQixFQUdyQmlCLEtBSHFCLEVBSXJCQyxPQUpxQixFQUtmO0FBQ04sU0FBSyxNQUFNQyxJQUFYLElBQW1CRixLQUFuQixFQUEwQjtBQUN4QixVQUFJcEIsTUFBVyxHQUFHSCxNQUFsQjs7QUFDQSxVQUFJO0FBQ0ZHLFFBQUFBLE1BQU0sR0FBR3NCLElBQUksQ0FBQ1osTUFBRCxDQUFiO0FBQ0FWLFFBQUFBLE1BQU0sQ0FBQ0ssSUFBUCxDQUFZaUIsSUFBWixFQUFrQm5CLE9BQWxCO0FBQ0QsT0FIRCxDQUdFLE9BQU9HLEdBQVAsRUFBWTtBQUNaLFlBQUlDLG9CQUFVQyxPQUFWLENBQWtCUixNQUFsQixDQUFKLEVBQStCLFNBQS9CLEtBQ0ssSUFBSXFCLE9BQU8sQ0FBQ0UsT0FBWixFQUFxQkYsT0FBTyxDQUFDRSxPQUFSLENBQWdCakIsR0FBaEI7QUFDM0I7O0FBQ0QsVUFBSSxDQUFDZSxPQUFPLENBQUNHLFNBQWIsRUFBd0I7QUFDekI7QUFDRjs7QUFDa0MsU0FBckJDLHFCQUFxQixDQUNqQ2YsTUFEaUMsRUFFakNQLE9BRmlDLEVBR2pDaUIsS0FIaUMsRUFJM0I7QUFDTixTQUFLLE1BQU1FLElBQVgsSUFBbUJGLEtBQW5CLEVBQTBCO0FBQ3hCRSxNQUFBQSxJQUFJLENBQUNaLE1BQUQsQ0FBSixDQUFhUCxPQUFiO0FBQ0Q7QUFDRjs7QUE5RWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUHVzaCB9IGZyb20gJ0BkZWZpbml0aW9ucyc7XG5pbXBvcnQgeyBIb29rcywgU3Vic2NyaXB0aW9uLCBUYWxrYmFjayB9IGZyb20gJy4uL2Fzc2lzdGFuY2UnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uTWFuYWdlciB9IGZyb20gJy4vU3Vic2NyaXB0aW9uTWFuYWdlcic7XG5pbXBvcnQgeyBFbXB0eSwgRGljdGlvbmFyeSwgTnVsbGFyeUZuLCBUeXBlR3VhcmQgfSBmcm9tICd0eXBlLWNvcmUnO1xuXG5jb25zdCAkZW1wdHkgPSBTeW1ib2woJ2VtcHR5Jyk7XG5cbmV4cG9ydCBjbGFzcyBJbnZva2Uge1xuICBwdWJsaWMgc3RhdGljIG1ldGhvZDxUIGV4dGVuZHMgRGljdGlvbmFyeSwgSyBleHRlbmRzIGtleW9mIFQ+KFxuICAgIG9iajogVCB8IEVtcHR5LFxuICAgIGtleTogSyxcbiAgICBwYXlsb2FkPzogRW1wdHkgfCBhbnlbXSxcbiAgICBvbkVtcHR5PzogRW1wdHkgfCBOdWxsYXJ5Rm5cbiAgKTogdm9pZCB7XG4gICAgaWYgKCFvYmopIHJldHVybjtcbiAgICBsZXQgbWV0aG9kOiBhbnkgPSAkZW1wdHk7XG4gICAgdHJ5IHtcbiAgICAgIG1ldGhvZCA9IChvYmogYXMgYW55KVtrZXldO1xuICAgICAgcGF5bG9hZCA/IG1ldGhvZC5jYWxsKG9iaiwgLi4ucGF5bG9hZCkgOiBtZXRob2QuY2FsbChvYmopO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKFR5cGVHdWFyZC5pc0VtcHR5KG1ldGhvZCkpIG9uRW1wdHkgJiYgb25FbXB0eSgpO1xuICAgICAgZWxzZSB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBzdGF0aWMgb2JzZXJ2ZXIoXG4gICAgYWN0aW9uOiAnc3RhcnQnIHwgJ2Vycm9yJyB8ICdjb21wbGV0ZScsXG4gICAgcGF5bG9hZDogYW55LFxuICAgIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uLFxuICAgIGhvb2tzOiBIb29rc1xuICApOiB2b2lkIHtcbiAgICBpZiAoU3Vic2NyaXB0aW9uTWFuYWdlci5pc0Nsb3NlZChzdWJzY3JpcHRpb24pKSB7XG4gICAgICBpZiAoYWN0aW9uID09PSAnZXJyb3InKSBob29rcy5vblVuaGFuZGxlZEVycm9yKHBheWxvYWQsIHN1YnNjcmlwdGlvbik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBTdWJzY3JpcHRpb25NYW5hZ2VyLmdldE9ic2VydmVyKHN1YnNjcmlwdGlvbik7XG4gICAgaWYgKGFjdGlvbiAhPT0gJ3N0YXJ0JykgU3Vic2NyaXB0aW9uTWFuYWdlci5jbG9zZShzdWJzY3JpcHRpb24pO1xuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMubWV0aG9kKFxuICAgICAgICBvYnNlcnZlcixcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBhY3Rpb24gPT09ICdjb21wbGV0ZScgPyBudWxsIDogW3BheWxvYWRdLFxuICAgICAgICBhY3Rpb24gPT09ICdlcnJvcidcbiAgICAgICAgICA/ICgpID0+IGhvb2tzLm9uVW5oYW5kbGVkRXJyb3IocGF5bG9hZCwgc3Vic2NyaXB0aW9uKVxuICAgICAgICAgIDogbnVsbFxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGhvb2tzLm9uVW5oYW5kbGVkRXJyb3IoZXJyIGFzIEVycm9yLCBzdWJzY3JpcHRpb24pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoYWN0aW9uICE9PSAnc3RhcnQnKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGhvb2tzLm9uVW5oYW5kbGVkRXJyb3IoZXJyIGFzIEVycm9yLCBzdWJzY3JpcHRpb24pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHB1YmxpYyBzdGF0aWMgb2JzZXJ2ZXJzKFxuICAgIGFjdGlvbjoga2V5b2YgUHVzaC5PYnNlcnZlcixcbiAgICBwYXlsb2FkOiBhbnksXG4gICAgaXRlbXM6IFB1c2guT2JzZXJ2ZXJbXSxcbiAgICBvcHRpb25zOiBUYWxrYmFjay5PcHRpb25zXG4gICk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgbGV0IG1ldGhvZDogYW55ID0gJGVtcHR5O1xuICAgICAgdHJ5IHtcbiAgICAgICAgbWV0aG9kID0gaXRlbVthY3Rpb25dO1xuICAgICAgICBtZXRob2QuY2FsbChpdGVtLCBwYXlsb2FkKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoVHlwZUd1YXJkLmlzRW1wdHkobWV0aG9kKSkgY29udGludWU7XG4gICAgICAgIGVsc2UgaWYgKG9wdGlvbnMub25FcnJvcikgb3B0aW9ucy5vbkVycm9yKGVyciBhcyBFcnJvcik7XG4gICAgICB9XG4gICAgICBpZiAoIW9wdGlvbnMubXVsdGljYXN0KSBicmVhaztcbiAgICB9XG4gIH1cbiAgcHVibGljIHN0YXRpYyBzdWJzY3JpcHRpb25PYnNlcnZlcnMoXG4gICAgYWN0aW9uOiBFeGNsdWRlPGtleW9mIFB1c2guU3Vic2NyaXB0aW9uT2JzZXJ2ZXIsICdjbG9zZWQnPixcbiAgICBwYXlsb2FkOiBhbnksXG4gICAgaXRlbXM6IFNldDxQdXNoLlN1YnNjcmlwdGlvbk9ic2VydmVyPlxuICApOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgIGl0ZW1bYWN0aW9uXShwYXlsb2FkKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==