live-set
Version:
Class representing a changing and transformable collection of items.
92 lines (82 loc) • 7.5 kB
JavaScript
;
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