live-set
Version:
Class representing a changing and transformable collection of items.
84 lines (76 loc) • 7.88 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = merge;
var _ = _interopRequireDefault(require("."));
function merge(liveSets) {
return new _.default({
scheduler: liveSets[0] ? liveSets[0].getScheduler() : undefined,
read: function read() {
var s = new Set();
liveSets.forEach(function (liveSet) {
liveSet.values().forEach(function (value) {
s.add(value);
});
});
return s;
},
listen: function listen(setValues, controller) {
var initialValues = new Set();
var subs = new Set();
var doneSubscribing = false;
liveSets.forEach(function (liveSet) {
var sub;
liveSet.subscribe({
start: function start(_sub) {
sub = _sub;
subs.add(sub);
liveSet.values().forEach(function (value) {
initialValues.add(value);
});
},
next: function next(changes) {
changes.forEach(function (change) {
if (change.type === 'add') {
controller.add(change.value);
} else if (change.type === 'remove') {
controller.remove(change.value);
}
});
},
error: function error(err) {
controller.error(err);
},
complete: function complete() {
subs.delete(sub);
if (doneSubscribing && subs.size === 0) {
controller.end();
}
}
});
});
setValues(initialValues);
doneSubscribing = true;
if (subs.size === 0) {
controller.end();
}
return {
unsubscribe: function unsubscribe() {
subs.forEach(function (sub) {
sub.unsubscribe();
});
},
pullChanges: function pullChanges() {
subs.forEach(function (sub) {
sub.pullChanges();
});
}
};
}
});
}
module.exports = exports.default;
module.exports.default = exports.default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9tZXJnZS5qcyJdLCJuYW1lcyI6WyJtZXJnZSIsImxpdmVTZXRzIiwiTGl2ZVNldCIsInNjaGVkdWxlciIsImdldFNjaGVkdWxlciIsInVuZGVmaW5lZCIsInJlYWQiLCJzIiwiU2V0IiwiZm9yRWFjaCIsImxpdmVTZXQiLCJ2YWx1ZXMiLCJ2YWx1ZSIsImFkZCIsImxpc3RlbiIsInNldFZhbHVlcyIsImNvbnRyb2xsZXIiLCJpbml0aWFsVmFsdWVzIiwic3VicyIsImRvbmVTdWJzY3JpYmluZyIsInN1YiIsInN1YnNjcmliZSIsInN0YXJ0IiwiX3N1YiIsIm5leHQiLCJjaGFuZ2VzIiwiY2hhbmdlIiwidHlwZSIsInJlbW92ZSIsImVycm9yIiwiZXJyIiwiY29tcGxldGUiLCJkZWxldGUiLCJzaXplIiwiZW5kIiwidW5zdWJzY3JpYmUiLCJwdWxsQ2hhbmdlcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBRUE7O0FBRWUsU0FBU0EsS0FBVCxDQUFrQkMsUUFBbEIsRUFBMkQ7QUFDeEUsU0FBTyxJQUFJQyxTQUFKLENBQVk7QUFDakJDLElBQUFBLFNBQVMsRUFBRUYsUUFBUSxDQUFDLENBQUQsQ0FBUixHQUFjQSxRQUFRLENBQUMsQ0FBRCxDQUFSLENBQVlHLFlBQVosRUFBZCxHQUEyQ0MsU0FEckM7QUFFakJDLElBQUFBLElBRmlCLGtCQUVWO0FBQ0wsVUFBTUMsQ0FBQyxHQUFHLElBQUlDLEdBQUosRUFBVjtBQUNBUCxNQUFBQSxRQUFRLENBQUNRLE9BQVQsQ0FBaUIsVUFBQUMsT0FBTyxFQUFJO0FBQzFCQSxRQUFBQSxPQUFPLENBQUNDLE1BQVIsR0FBaUJGLE9BQWpCLENBQXlCLFVBQUFHLEtBQUssRUFBSTtBQUNoQ0wsVUFBQUEsQ0FBQyxDQUFDTSxHQUFGLENBQU1ELEtBQU47QUFDRCxTQUZEO0FBR0QsT0FKRDtBQUtBLGFBQU9MLENBQVA7QUFDRCxLQVZnQjtBQVdqQk8sSUFBQUEsTUFYaUIsa0JBV1ZDLFNBWFUsRUFXQ0MsVUFYRCxFQVdhO0FBQzVCLFVBQU1DLGFBQWEsR0FBRyxJQUFJVCxHQUFKLEVBQXRCO0FBQ0EsVUFBTVUsSUFBSSxHQUFHLElBQUlWLEdBQUosRUFBYjtBQUNBLFVBQUlXLGVBQWUsR0FBRyxLQUF0QjtBQUNBbEIsTUFBQUEsUUFBUSxDQUFDUSxPQUFULENBQWlCLFVBQUFDLE9BQU8sRUFBSTtBQUMxQixZQUFJVSxHQUFKO0FBQ0FWLFFBQUFBLE9BQU8sQ0FBQ1csU0FBUixDQUFrQjtBQUNoQkMsVUFBQUEsS0FEZ0IsaUJBQ1ZDLElBRFUsRUFDSjtBQUNWSCxZQUFBQSxHQUFHLEdBQUdHLElBQU47QUFDQUwsWUFBQUEsSUFBSSxDQUFDTCxHQUFMLENBQVNPLEdBQVQ7QUFDQVYsWUFBQUEsT0FBTyxDQUFDQyxNQUFSLEdBQWlCRixPQUFqQixDQUF5QixVQUFBRyxLQUFLLEVBQUk7QUFDaENLLGNBQUFBLGFBQWEsQ0FBQ0osR0FBZCxDQUFrQkQsS0FBbEI7QUFDRCxhQUZEO0FBR0QsV0FQZTtBQVFoQlksVUFBQUEsSUFSZ0IsZ0JBUVhDLE9BUlcsRUFRRjtBQUNaQSxZQUFBQSxPQUFPLENBQUNoQixPQUFSLENBQWdCLFVBQUFpQixNQUFNLEVBQUk7QUFDeEIsa0JBQUlBLE1BQU0sQ0FBQ0MsSUFBUCxLQUFnQixLQUFwQixFQUEyQjtBQUN6QlgsZ0JBQUFBLFVBQVUsQ0FBQ0gsR0FBWCxDQUFlYSxNQUFNLENBQUNkLEtBQXRCO0FBQ0QsZUFGRCxNQUVPLElBQUljLE1BQU0sQ0FBQ0MsSUFBUCxLQUFnQixRQUFwQixFQUE4QjtBQUNuQ1gsZ0JBQUFBLFVBQVUsQ0FBQ1ksTUFBWCxDQUFrQkYsTUFBTSxDQUFDZCxLQUF6QjtBQUNEO0FBQ0YsYUFORDtBQU9ELFdBaEJlO0FBaUJoQmlCLFVBQUFBLEtBakJnQixpQkFpQlZDLEdBakJVLEVBaUJMO0FBQ1RkLFlBQUFBLFVBQVUsQ0FBQ2EsS0FBWCxDQUFpQkMsR0FBakI7QUFDRCxXQW5CZTtBQW9CaEJDLFVBQUFBLFFBcEJnQixzQkFvQkw7QUFDVGIsWUFBQUEsSUFBSSxDQUFDYyxNQUFMLENBQVlaLEdBQVo7O0FBQ0EsZ0JBQUlELGVBQWUsSUFBSUQsSUFBSSxDQUFDZSxJQUFMLEtBQWMsQ0FBckMsRUFBd0M7QUFDdENqQixjQUFBQSxVQUFVLENBQUNrQixHQUFYO0FBQ0Q7QUFDRjtBQXpCZSxTQUFsQjtBQTJCRCxPQTdCRDtBQStCQW5CLE1BQUFBLFNBQVMsQ0FBQ0UsYUFBRCxDQUFUO0FBRUFFLE1BQUFBLGVBQWUsR0FBRyxJQUFsQjs7QUFDQSxVQUFJRCxJQUFJLENBQUNlLElBQUwsS0FBYyxDQUFsQixFQUFxQjtBQUNuQmpCLFFBQUFBLFVBQVUsQ0FBQ2tCLEdBQVg7QUFDRDs7QUFDRCxhQUFPO0FBQ0xDLFFBQUFBLFdBREsseUJBQ1M7QUFDWmpCLFVBQUFBLElBQUksQ0FBQ1QsT0FBTCxDQUFhLFVBQUFXLEdBQUcsRUFBSTtBQUNsQkEsWUFBQUEsR0FBRyxDQUFDZSxXQUFKO0FBQ0QsV0FGRDtBQUdELFNBTEk7QUFNTEMsUUFBQUEsV0FOSyx5QkFNUztBQUNabEIsVUFBQUEsSUFBSSxDQUFDVCxPQUFMLENBQWEsVUFBQVcsR0FBRyxFQUFJO0FBQ2xCQSxZQUFBQSxHQUFHLENBQUNnQixXQUFKO0FBQ0QsV0FGRDtBQUdEO0FBVkksT0FBUDtBQVlEO0FBaEVnQixHQUFaLENBQVA7QUFrRUQiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBAZmxvdyAqL1xuXG5pbXBvcnQgTGl2ZVNldCBmcm9tICcuJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWVyZ2U8VD4obGl2ZVNldHM6IEFycmF5PExpdmVTZXQ8VD4+KTogTGl2ZVNldDxUPiB7XG4gIHJldHVybiBuZXcgTGl2ZVNldCh7XG4gICAgc2NoZWR1bGVyOiBsaXZlU2V0c1swXSA/IGxpdmVTZXRzWzBdLmdldFNjaGVkdWxlcigpIDogdW5kZWZpbmVkLFxuICAgIHJlYWQoKSB7XG4gICAgICBjb25zdCBzID0gbmV3IFNldCgpO1xuICAgICAgbGl2ZVNldHMuZm9yRWFjaChsaXZlU2V0ID0+IHtcbiAgICAgICAgbGl2ZVNldC52YWx1ZXMoKS5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgICAgICBzLmFkZCh2YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcztcbiAgICB9LFxuICAgIGxpc3RlbihzZXRWYWx1ZXMsIGNvbnRyb2xsZXIpIHtcbiAgICAgIGNvbnN0IGluaXRpYWxWYWx1ZXMgPSBuZXcgU2V0KCk7XG4gICAgICBjb25zdCBzdWJzID0gbmV3IFNldCgpO1xuICAgICAgbGV0IGRvbmVTdWJzY3JpYmluZyA9IGZhbHNlO1xuICAgICAgbGl2ZVNldHMuZm9yRWFjaChsaXZlU2V0ID0+IHtcbiAgICAgICAgbGV0IHN1YjtcbiAgICAgICAgbGl2ZVNldC5zdWJzY3JpYmUoe1xuICAgICAgICAgIHN0YXJ0KF9zdWIpIHtcbiAgICAgICAgICAgIHN1YiA9IF9zdWI7XG4gICAgICAgICAgICBzdWJzLmFkZChzdWIpO1xuICAgICAgICAgICAgbGl2ZVNldC52YWx1ZXMoKS5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlcy5hZGQodmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBuZXh0KGNoYW5nZXMpIHtcbiAgICAgICAgICAgIGNoYW5nZXMuZm9yRWFjaChjaGFuZ2UgPT4ge1xuICAgICAgICAgICAgICBpZiAoY2hhbmdlLnR5cGUgPT09ICdhZGQnKSB7XG4gICAgICAgICAgICAgICAgY29udHJvbGxlci5hZGQoY2hhbmdlLnZhbHVlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGFuZ2UudHlwZSA9PT0gJ3JlbW92ZScpIHtcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyLnJlbW92ZShjaGFuZ2UudmFsdWUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVycm9yKGVycikge1xuICAgICAgICAgICAgY29udHJvbGxlci5lcnJvcihlcnIpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgY29tcGxldGUoKSB7XG4gICAgICAgICAgICBzdWJzLmRlbGV0ZShzdWIpO1xuICAgICAgICAgICAgaWYgKGRvbmVTdWJzY3JpYmluZyAmJiBzdWJzLnNpemUgPT09IDApIHtcbiAgICAgICAgICAgICAgY29udHJvbGxlci5lbmQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHNldFZhbHVlcyhpbml0aWFsVmFsdWVzKTtcblxuICAgICAgZG9uZVN1YnNjcmliaW5nID0gdHJ1ZTtcbiAgICAgIGlmIChzdWJzLnNpemUgPT09IDApIHtcbiAgICAgICAgY29udHJvbGxlci5lbmQoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHVuc3Vic2NyaWJlKCkge1xuICAgICAgICAgIHN1YnMuZm9yRWFjaChzdWIgPT4ge1xuICAgICAgICAgICAgc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHB1bGxDaGFuZ2VzKCkge1xuICAgICAgICAgIHN1YnMuZm9yRWFjaChzdWIgPT4ge1xuICAgICAgICAgICAgc3ViLnB1bGxDaGFuZ2VzKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9KTtcbn1cbiJdfQ==