live-set
Version:
Class representing a changing and transformable collection of items.
63 lines (57 loc) • 6.38 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = map;
var _ = _interopRequireDefault(require("."));
function map(liveSet, cb) {
return new _.default({
scheduler: liveSet.getScheduler(),
read: function read() {
var s = new Set();
liveSet.values().forEach(function (value) {
s.add(cb(value));
});
return s;
},
listen: function listen(setValues, controller) {
var m = new Map();
var sub = liveSet.subscribe({
start: function start() {
var s = new Set();
liveSet.values().forEach(function (value) {
var newValue = cb(value);
m.set(value, newValue);
s.add(newValue);
});
setValues(s);
},
next: function next(changes) {
changes.forEach(function (change) {
if (change.type === 'add') {
var newValue = cb(change.value);
m.set(change.value, newValue);
controller.add(newValue);
} else if (change.type === 'remove') {
var _newValue = m.get(change.value);
if (!_newValue) throw new Error('removed item not in liveset');
m.delete(change.value);
controller.remove(_newValue);
}
});
},
error: function error(err) {
controller.error(err);
},
complete: function complete() {
controller.end();
}
});
return sub;
}
});
}
module.exports = exports.default;
module.exports.default = exports.default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9tYXAuanMiXSwibmFtZXMiOlsibWFwIiwibGl2ZVNldCIsImNiIiwiTGl2ZVNldCIsInNjaGVkdWxlciIsImdldFNjaGVkdWxlciIsInJlYWQiLCJzIiwiU2V0IiwidmFsdWVzIiwiZm9yRWFjaCIsInZhbHVlIiwiYWRkIiwibGlzdGVuIiwic2V0VmFsdWVzIiwiY29udHJvbGxlciIsIm0iLCJNYXAiLCJzdWIiLCJzdWJzY3JpYmUiLCJzdGFydCIsIm5ld1ZhbHVlIiwic2V0IiwibmV4dCIsImNoYW5nZXMiLCJjaGFuZ2UiLCJ0eXBlIiwiZ2V0IiwiRXJyb3IiLCJkZWxldGUiLCJyZW1vdmUiLCJlcnJvciIsImVyciIsImNvbXBsZXRlIiwiZW5kIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFFQTs7QUFFZSxTQUFTQSxHQUFULENBQWtCQyxPQUFsQixFQUF1Q0MsRUFBdkMsRUFBd0U7QUFDckYsU0FBTyxJQUFJQyxTQUFKLENBQVk7QUFDakJDLElBQUFBLFNBQVMsRUFBRUgsT0FBTyxDQUFDSSxZQUFSLEVBRE07QUFFakJDLElBQUFBLElBRmlCLGtCQUVWO0FBQ0wsVUFBTUMsQ0FBQyxHQUFHLElBQUlDLEdBQUosRUFBVjtBQUNBUCxNQUFBQSxPQUFPLENBQUNRLE1BQVIsR0FBaUJDLE9BQWpCLENBQXlCLFVBQUFDLEtBQUssRUFBSTtBQUNoQ0osUUFBQUEsQ0FBQyxDQUFDSyxHQUFGLENBQU1WLEVBQUUsQ0FBQ1MsS0FBRCxDQUFSO0FBQ0QsT0FGRDtBQUdBLGFBQU9KLENBQVA7QUFDRCxLQVJnQjtBQVNqQk0sSUFBQUEsTUFUaUIsa0JBU1ZDLFNBVFUsRUFTQ0MsVUFURCxFQVNhO0FBQzVCLFVBQU1DLENBQVcsR0FBRyxJQUFJQyxHQUFKLEVBQXBCO0FBRUEsVUFBTUMsR0FBRyxHQUFHakIsT0FBTyxDQUFDa0IsU0FBUixDQUFrQjtBQUM1QkMsUUFBQUEsS0FENEIsbUJBQ3BCO0FBQ04sY0FBTWIsQ0FBQyxHQUFHLElBQUlDLEdBQUosRUFBVjtBQUNBUCxVQUFBQSxPQUFPLENBQUNRLE1BQVIsR0FBaUJDLE9BQWpCLENBQXlCLFVBQUFDLEtBQUssRUFBSTtBQUNoQyxnQkFBTVUsUUFBUSxHQUFHbkIsRUFBRSxDQUFDUyxLQUFELENBQW5CO0FBQ0FLLFlBQUFBLENBQUMsQ0FBQ00sR0FBRixDQUFNWCxLQUFOLEVBQWFVLFFBQWI7QUFDQWQsWUFBQUEsQ0FBQyxDQUFDSyxHQUFGLENBQU1TLFFBQU47QUFDRCxXQUpEO0FBS0FQLFVBQUFBLFNBQVMsQ0FBQ1AsQ0FBRCxDQUFUO0FBQ0QsU0FUMkI7QUFVNUJnQixRQUFBQSxJQVY0QixnQkFVdkJDLE9BVnVCLEVBVWQ7QUFDWkEsVUFBQUEsT0FBTyxDQUFDZCxPQUFSLENBQWdCLFVBQUFlLE1BQU0sRUFBSTtBQUN4QixnQkFBSUEsTUFBTSxDQUFDQyxJQUFQLEtBQWdCLEtBQXBCLEVBQTJCO0FBQ3pCLGtCQUFNTCxRQUFRLEdBQUduQixFQUFFLENBQUN1QixNQUFNLENBQUNkLEtBQVIsQ0FBbkI7QUFDQUssY0FBQUEsQ0FBQyxDQUFDTSxHQUFGLENBQU1HLE1BQU0sQ0FBQ2QsS0FBYixFQUFvQlUsUUFBcEI7QUFDQU4sY0FBQUEsVUFBVSxDQUFDSCxHQUFYLENBQWVTLFFBQWY7QUFDRCxhQUpELE1BSU8sSUFBSUksTUFBTSxDQUFDQyxJQUFQLEtBQWdCLFFBQXBCLEVBQThCO0FBQ25DLGtCQUFNTCxTQUFRLEdBQUdMLENBQUMsQ0FBQ1csR0FBRixDQUFNRixNQUFNLENBQUNkLEtBQWIsQ0FBakI7O0FBQ0Esa0JBQUksQ0FBQ1UsU0FBTCxFQUFlLE1BQU0sSUFBSU8sS0FBSixDQUFVLDZCQUFWLENBQU47QUFDZlosY0FBQUEsQ0FBQyxDQUFDYSxNQUFGLENBQVNKLE1BQU0sQ0FBQ2QsS0FBaEI7QUFDQUksY0FBQUEsVUFBVSxDQUFDZSxNQUFYLENBQWtCVCxTQUFsQjtBQUNEO0FBQ0YsV0FYRDtBQVlELFNBdkIyQjtBQXdCNUJVLFFBQUFBLEtBeEI0QixpQkF3QnRCQyxHQXhCc0IsRUF3QmpCO0FBQ1RqQixVQUFBQSxVQUFVLENBQUNnQixLQUFYLENBQWlCQyxHQUFqQjtBQUNELFNBMUIyQjtBQTJCNUJDLFFBQUFBLFFBM0I0QixzQkEyQmpCO0FBQ1RsQixVQUFBQSxVQUFVLENBQUNtQixHQUFYO0FBQ0Q7QUE3QjJCLE9BQWxCLENBQVo7QUFnQ0EsYUFBT2hCLEdBQVA7QUFDRDtBQTdDZ0IsR0FBWixDQUFQO0FBK0NEIiwic291cmNlc0NvbnRlbnQiOlsiLyogQGZsb3cgKi9cblxuaW1wb3J0IExpdmVTZXQgZnJvbSAnLic7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1hcDxULFU+KGxpdmVTZXQ6IExpdmVTZXQ8VD4sIGNiOiAodmFsdWU6IFQpID0+IFUpOiBMaXZlU2V0PFU+IHtcbiAgcmV0dXJuIG5ldyBMaXZlU2V0KHtcbiAgICBzY2hlZHVsZXI6IGxpdmVTZXQuZ2V0U2NoZWR1bGVyKCksXG4gICAgcmVhZCgpIHtcbiAgICAgIGNvbnN0IHMgPSBuZXcgU2V0KCk7XG4gICAgICBsaXZlU2V0LnZhbHVlcygpLmZvckVhY2godmFsdWUgPT4ge1xuICAgICAgICBzLmFkZChjYih2YWx1ZSkpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcztcbiAgICB9LFxuICAgIGxpc3RlbihzZXRWYWx1ZXMsIGNvbnRyb2xsZXIpIHtcbiAgICAgIGNvbnN0IG06IE1hcDxULFU+ID0gbmV3IE1hcCgpO1xuXG4gICAgICBjb25zdCBzdWIgPSBsaXZlU2V0LnN1YnNjcmliZSh7XG4gICAgICAgIHN0YXJ0KCkge1xuICAgICAgICAgIGNvbnN0IHMgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgbGl2ZVNldC52YWx1ZXMoKS5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gY2IodmFsdWUpO1xuICAgICAgICAgICAgbS5zZXQodmFsdWUsIG5ld1ZhbHVlKTtcbiAgICAgICAgICAgIHMuYWRkKG5ld1ZhbHVlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBzZXRWYWx1ZXMocyk7XG4gICAgICAgIH0sXG4gICAgICAgIG5leHQoY2hhbmdlcykge1xuICAgICAgICAgIGNoYW5nZXMuZm9yRWFjaChjaGFuZ2UgPT4ge1xuICAgICAgICAgICAgaWYgKGNoYW5nZS50eXBlID09PSAnYWRkJykge1xuICAgICAgICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IGNiKGNoYW5nZS52YWx1ZSk7XG4gICAgICAgICAgICAgIG0uc2V0KGNoYW5nZS52YWx1ZSwgbmV3VmFsdWUpO1xuICAgICAgICAgICAgICBjb250cm9sbGVyLmFkZChuZXdWYWx1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNoYW5nZS50eXBlID09PSAncmVtb3ZlJykge1xuICAgICAgICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IG0uZ2V0KGNoYW5nZS52YWx1ZSk7XG4gICAgICAgICAgICAgIGlmICghbmV3VmFsdWUpIHRocm93IG5ldyBFcnJvcigncmVtb3ZlZCBpdGVtIG5vdCBpbiBsaXZlc2V0Jyk7XG4gICAgICAgICAgICAgIG0uZGVsZXRlKGNoYW5nZS52YWx1ZSk7XG4gICAgICAgICAgICAgIGNvbnRyb2xsZXIucmVtb3ZlKG5ld1ZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3IoZXJyKSB7XG4gICAgICAgICAgY29udHJvbGxlci5lcnJvcihlcnIpO1xuICAgICAgICB9LFxuICAgICAgICBjb21wbGV0ZSgpIHtcbiAgICAgICAgICBjb250cm9sbGVyLmVuZCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHN1YjtcbiAgICB9XG4gIH0pO1xufVxuIl19