UNPKG

live-set

Version:

Class representing a changing and transformable collection of items.

92 lines (82 loc) 7.5 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = toValueObservable; var _ = _interopRequireDefault(require(".")); var _zenObservable = _interopRequireDefault(require("zen-observable")); function toValueObservable(liveSet) { return new _zenObservable.default(function (observer) { var resolvers = new Map(); function addedItem(value) { var resolve; var removal = new Promise(function (_resolve) { resolve = _resolve; }); resolvers.set(value, resolve); var valueWithRemoval = { value: value, removal: removal }; observer.next(valueWithRemoval); } function removedItem(value) { var resolver = resolvers.get(value); if (!resolver) throw new Error('Resolver not found in map for value'); resolvers.delete(value); resolver(); } var sub = liveSet.subscribe({ start: function start(sub) { var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; try { for (var _iterator = liveSet.values()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var value = _step.value; if (sub.closed) break; addedItem(value); } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return != null) { _iterator.return(); } } finally { if (_didIteratorError) { throw _iteratorError; } } } }, next: function next(changes) { changes.forEach(function (change) { if (change.type === 'add') { addedItem(change.value); } else if (change.type === 'remove') { removedItem(change.value); } }); }, error: function error(err) { observer.error(err); }, complete: function complete() { observer.complete(); } }); return function () { sub.unsubscribe(); resolvers.forEach(function (resolver) { resolver(); }); }; }); } module.exports = exports.default; module.exports.default = exports.default; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy90b1ZhbHVlT2JzZXJ2YWJsZS5qcyJdLCJuYW1lcyI6WyJ0b1ZhbHVlT2JzZXJ2YWJsZSIsImxpdmVTZXQiLCJPYnNlcnZhYmxlIiwib2JzZXJ2ZXIiLCJyZXNvbHZlcnMiLCJNYXAiLCJhZGRlZEl0ZW0iLCJ2YWx1ZSIsInJlc29sdmUiLCJyZW1vdmFsIiwiUHJvbWlzZSIsIl9yZXNvbHZlIiwic2V0IiwidmFsdWVXaXRoUmVtb3ZhbCIsIm5leHQiLCJyZW1vdmVkSXRlbSIsInJlc29sdmVyIiwiZ2V0IiwiRXJyb3IiLCJkZWxldGUiLCJzdWIiLCJzdWJzY3JpYmUiLCJzdGFydCIsInZhbHVlcyIsImNsb3NlZCIsImNoYW5nZXMiLCJmb3JFYWNoIiwiY2hhbmdlIiwidHlwZSIsImVycm9yIiwiZXJyIiwiY29tcGxldGUiLCJ1bnN1YnNjcmliZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBRUE7O0FBQ0E7O0FBT2UsU0FBU0EsaUJBQVQsQ0FBOEJDLE9BQTlCLEVBQW1EO0FBQ2hFLFNBQU8sSUFBSUMsc0JBQUosQ0FBZSxVQUFBQyxRQUFRLEVBQUk7QUFDaEMsUUFBTUMsU0FBMkIsR0FBRyxJQUFJQyxHQUFKLEVBQXBDOztBQUVBLGFBQVNDLFNBQVQsQ0FBbUJDLEtBQW5CLEVBQTZCO0FBQzNCLFVBQUlDLE9BQUo7QUFDQSxVQUFNQyxPQUFzQixHQUFHLElBQUlDLE9BQUosQ0FBWSxVQUFBQyxRQUFRLEVBQUk7QUFDckRILFFBQUFBLE9BQU8sR0FBR0csUUFBVjtBQUNELE9BRjhCLENBQS9CO0FBR0FQLE1BQUFBLFNBQVMsQ0FBQ1EsR0FBVixDQUFjTCxLQUFkLEVBQXNCQyxPQUF0QjtBQUNBLFVBQU1LLGdCQUFxQyxHQUFHO0FBQUNOLFFBQUFBLEtBQUssRUFBTEEsS0FBRDtBQUFRRSxRQUFBQSxPQUFPLEVBQVBBO0FBQVIsT0FBOUM7QUFDQU4sTUFBQUEsUUFBUSxDQUFDVyxJQUFULENBQWNELGdCQUFkO0FBQ0Q7O0FBRUQsYUFBU0UsV0FBVCxDQUFxQlIsS0FBckIsRUFBK0I7QUFDN0IsVUFBTVMsUUFBUSxHQUFHWixTQUFTLENBQUNhLEdBQVYsQ0FBY1YsS0FBZCxDQUFqQjtBQUNBLFVBQUksQ0FBQ1MsUUFBTCxFQUFlLE1BQU0sSUFBSUUsS0FBSixDQUFVLHFDQUFWLENBQU47QUFDZmQsTUFBQUEsU0FBUyxDQUFDZSxNQUFWLENBQWlCWixLQUFqQjtBQUNBUyxNQUFBQSxRQUFRO0FBQ1Q7O0FBRUQsUUFBTUksR0FBRyxHQUFHbkIsT0FBTyxDQUFDb0IsU0FBUixDQUFrQjtBQUM1QkMsTUFBQUEsS0FENEIsaUJBQ3RCRixHQURzQixFQUNqQjtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUNULCtCQUFrQm5CLE9BQU8sQ0FBQ3NCLE1BQVIsRUFBbEIsOEhBQW9DO0FBQUEsZ0JBQTNCaEIsS0FBMkI7QUFDbEMsZ0JBQUlhLEdBQUcsQ0FBQ0ksTUFBUixFQUFnQjtBQUNoQmxCLFlBQUFBLFNBQVMsQ0FBQ0MsS0FBRCxDQUFUO0FBQ0Q7QUFKUTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBS1YsT0FOMkI7QUFPNUJPLE1BQUFBLElBUDRCLGdCQU92QlcsT0FQdUIsRUFPZDtBQUNaQSxRQUFBQSxPQUFPLENBQUNDLE9BQVIsQ0FBZ0IsVUFBQUMsTUFBTSxFQUFJO0FBQ3hCLGNBQUlBLE1BQU0sQ0FBQ0MsSUFBUCxLQUFnQixLQUFwQixFQUEyQjtBQUN6QnRCLFlBQUFBLFNBQVMsQ0FBQ3FCLE1BQU0sQ0FBQ3BCLEtBQVIsQ0FBVDtBQUNELFdBRkQsTUFFTyxJQUFJb0IsTUFBTSxDQUFDQyxJQUFQLEtBQWdCLFFBQXBCLEVBQThCO0FBQ25DYixZQUFBQSxXQUFXLENBQUNZLE1BQU0sQ0FBQ3BCLEtBQVIsQ0FBWDtBQUNEO0FBQ0YsU0FORDtBQU9ELE9BZjJCO0FBZ0I1QnNCLE1BQUFBLEtBaEI0QixpQkFnQnRCQyxHQWhCc0IsRUFnQmpCO0FBQ1QzQixRQUFBQSxRQUFRLENBQUMwQixLQUFULENBQWVDLEdBQWY7QUFDRCxPQWxCMkI7QUFtQjVCQyxNQUFBQSxRQW5CNEIsc0JBbUJqQjtBQUNUNUIsUUFBQUEsUUFBUSxDQUFDNEIsUUFBVDtBQUNEO0FBckIyQixLQUFsQixDQUFaO0FBd0JBLFdBQU8sWUFBTTtBQUNYWCxNQUFBQSxHQUFHLENBQUNZLFdBQUo7QUFDQTVCLE1BQUFBLFNBQVMsQ0FBQ3NCLE9BQVYsQ0FBa0IsVUFBQVYsUUFBUSxFQUFJO0FBQzVCQSxRQUFBQSxRQUFRO0FBQ1QsT0FGRDtBQUdELEtBTEQ7QUFNRCxHQWxETSxDQUFQO0FBbUREIiwic291cmNlc0NvbnRlbnQiOlsiLyogQGZsb3cgKi9cblxuaW1wb3J0IExpdmVTZXQgZnJvbSAnLic7XG5pbXBvcnQgT2JzZXJ2YWJsZSBmcm9tICd6ZW4tb2JzZXJ2YWJsZSc7XG5cbmV4cG9ydCB0eXBlIFZhbHVlV2l0aFJlbW92YWw8K1Q+ID0ge1xuICArdmFsdWU6IFQ7XG4gICtyZW1vdmFsOiBQcm9taXNlPHZvaWQ+O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdG9WYWx1ZU9ic2VydmFibGU8VD4obGl2ZVNldDogTGl2ZVNldDxUPikge1xuICByZXR1cm4gbmV3IE9ic2VydmFibGUob2JzZXJ2ZXIgPT4ge1xuICAgIGNvbnN0IHJlc29sdmVyczogTWFwPFQsICgpPT52b2lkPiA9IG5ldyBNYXAoKTtcblxuICAgIGZ1bmN0aW9uIGFkZGVkSXRlbSh2YWx1ZTogVCkge1xuICAgICAgbGV0IHJlc29sdmU7XG4gICAgICBjb25zdCByZW1vdmFsOiBQcm9taXNlPHZvaWQ+ID0gbmV3IFByb21pc2UoX3Jlc29sdmUgPT4ge1xuICAgICAgICByZXNvbHZlID0gX3Jlc29sdmU7XG4gICAgICB9KTtcbiAgICAgIHJlc29sdmVycy5zZXQodmFsdWUsIChyZXNvbHZlOmFueSkpO1xuICAgICAgY29uc3QgdmFsdWVXaXRoUmVtb3ZhbDogVmFsdWVXaXRoUmVtb3ZhbDxUPiA9IHt2YWx1ZSwgcmVtb3ZhbH07XG4gICAgICBvYnNlcnZlci5uZXh0KHZhbHVlV2l0aFJlbW92YWwpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlbW92ZWRJdGVtKHZhbHVlOiBUKSB7XG4gICAgICBjb25zdCByZXNvbHZlciA9IHJlc29sdmVycy5nZXQodmFsdWUpO1xuICAgICAgaWYgKCFyZXNvbHZlcikgdGhyb3cgbmV3IEVycm9yKCdSZXNvbHZlciBub3QgZm91bmQgaW4gbWFwIGZvciB2YWx1ZScpO1xuICAgICAgcmVzb2x2ZXJzLmRlbGV0ZSh2YWx1ZSk7XG4gICAgICByZXNvbHZlcigpO1xuICAgIH1cblxuICAgIGNvbnN0IHN1YiA9IGxpdmVTZXQuc3Vic2NyaWJlKHtcbiAgICAgIHN0YXJ0KHN1Yikge1xuICAgICAgICBmb3IgKGxldCB2YWx1ZSBvZiBsaXZlU2V0LnZhbHVlcygpKSB7XG4gICAgICAgICAgaWYgKHN1Yi5jbG9zZWQpIGJyZWFrO1xuICAgICAgICAgIGFkZGVkSXRlbSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBuZXh0KGNoYW5nZXMpIHtcbiAgICAgICAgY2hhbmdlcy5mb3JFYWNoKGNoYW5nZSA9PiB7XG4gICAgICAgICAgaWYgKGNoYW5nZS50eXBlID09PSAnYWRkJykge1xuICAgICAgICAgICAgYWRkZWRJdGVtKGNoYW5nZS52YWx1ZSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChjaGFuZ2UudHlwZSA9PT0gJ3JlbW92ZScpIHtcbiAgICAgICAgICAgIHJlbW92ZWRJdGVtKGNoYW5nZS52YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBlcnJvcihlcnIpIHtcbiAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZXJyKTtcbiAgICAgIH0sXG4gICAgICBjb21wbGV0ZSgpIHtcbiAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBzdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgIHJlc29sdmVycy5mb3JFYWNoKHJlc29sdmVyID0+IHtcbiAgICAgICAgcmVzb2x2ZXIoKTtcbiAgICAgIH0pO1xuICAgIH07XG4gIH0pO1xufVxuIl19