live-set
Version:
Class representing a changing and transformable collection of items.
95 lines (84 loc) • 9.32 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = mapWithRemoval;
var _ = _interopRequireDefault(require("."));
function mapWithRemoval(input, cb) {
var output = new _.default({
scheduler: input.getScheduler(),
read: function read() {
throw new Error('mapWithRemoval liveset may not be read while inactive');
},
listen: function listen(setValues, controller) {
var m = new Map();
var sub = input.subscribe({
start: function start() {
var s = new Set();
input.values().forEach(function (value) {
var resolve;
var removal = new Promise(function (_resolve) {
resolve = _resolve;
});
/*:: if (!resolve) throw new Error(); */
var newValue = cb(value, removal);
m.set(value, {
newValue: newValue,
resolve: resolve
});
s.add(newValue);
});
setValues(s);
},
next: function next(changes) {
changes.forEach(function (change) {
if (change.type === 'add') {
var resolve;
var _removal = new Promise(function (_resolve) {
resolve = _resolve;
});
/*:: if (!resolve) throw new Error(); */
var newValue = cb(change.value, _removal);
m.set(change.value, {
newValue: newValue,
resolve: resolve
});
controller.add(newValue);
} else if (change.type === 'remove') {
var entry = m.get(change.value);
if (!entry) throw new Error('removed item not in liveset');
var _newValue = entry.newValue,
_resolve2 = entry.resolve;
_resolve2();
m.delete(change.value);
controller.remove(_newValue);
}
});
},
error: function error(err) {
controller.error(err);
},
complete: function complete() {
controller.end();
}
});
return {
unsubscribe: function unsubscribe() {
sub.unsubscribe();
m.forEach(function (_ref) {
var resolve = _ref.resolve;
resolve();
});
},
pullChanges: function pullChanges() {
sub.pullChanges();
}
};
}
});
return output;
}
module.exports = exports.default;
module.exports.default = exports.default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9tYXBXaXRoUmVtb3ZhbC5qcyJdLCJuYW1lcyI6WyJtYXBXaXRoUmVtb3ZhbCIsImlucHV0IiwiY2IiLCJvdXRwdXQiLCJMaXZlU2V0Iiwic2NoZWR1bGVyIiwiZ2V0U2NoZWR1bGVyIiwicmVhZCIsIkVycm9yIiwibGlzdGVuIiwic2V0VmFsdWVzIiwiY29udHJvbGxlciIsIm0iLCJNYXAiLCJzdWIiLCJzdWJzY3JpYmUiLCJzdGFydCIsInMiLCJTZXQiLCJ2YWx1ZXMiLCJmb3JFYWNoIiwidmFsdWUiLCJyZXNvbHZlIiwicmVtb3ZhbCIsIlByb21pc2UiLCJfcmVzb2x2ZSIsIm5ld1ZhbHVlIiwic2V0IiwiYWRkIiwibmV4dCIsImNoYW5nZXMiLCJjaGFuZ2UiLCJ0eXBlIiwiZW50cnkiLCJnZXQiLCJkZWxldGUiLCJyZW1vdmUiLCJlcnJvciIsImVyciIsImNvbXBsZXRlIiwiZW5kIiwidW5zdWJzY3JpYmUiLCJwdWxsQ2hhbmdlcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBRUE7O0FBRWUsU0FBU0EsY0FBVCxDQUE2QkMsS0FBN0IsRUFBZ0RDLEVBQWhELEVBQXlHO0FBQ3RILE1BQU1DLE1BQU0sR0FBRyxJQUFJQyxTQUFKLENBQVk7QUFDekJDLElBQUFBLFNBQVMsRUFBRUosS0FBSyxDQUFDSyxZQUFOLEVBRGM7QUFFekJDLElBQUFBLElBRnlCLGtCQUVsQjtBQUNMLFlBQU0sSUFBSUMsS0FBSixDQUFVLHVEQUFWLENBQU47QUFDRCxLQUp3QjtBQUt6QkMsSUFBQUEsTUFMeUIsa0JBS2xCQyxTQUxrQixFQUtQQyxVQUxPLEVBS0s7QUFDNUIsVUFBTUMsQ0FBMkMsR0FBRyxJQUFJQyxHQUFKLEVBQXBEO0FBRUEsVUFBTUMsR0FBRyxHQUFHYixLQUFLLENBQUNjLFNBQU4sQ0FBZ0I7QUFDMUJDLFFBQUFBLEtBRDBCLG1CQUNsQjtBQUNOLGNBQU1DLENBQUMsR0FBRyxJQUFJQyxHQUFKLEVBQVY7QUFDQWpCLFVBQUFBLEtBQUssQ0FBQ2tCLE1B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dGVudCI6WyIvKiBAZmxvdyAqL1xuXG5pbXBvcnQgTGl2ZVNldCBmcm9tICcuJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWFwV2l0aFJlbW92YWw8VCxVPihpbnB1dDogTGl2ZVNldDxUPiwgY2I6ICh2YWx1ZTogVCwgcmVtb3ZhbDogUHJvbWlzZTx2b2lkPikgPT4gVSk6IExpdmVTZXQ8VT4ge1xuICBjb25zdCBvdXRwdXQgPSBuZXcgTGl2ZVNldCh7XG4gICAgc2NoZWR1bGVyOiBpbnB1dC5nZXRTY2hlZHVsZXIoKSxcbiAgICByZWFkKCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtYXBXaXRoUmVtb3ZhbCBsaXZlc2V0IG1heSBub3QgYmUgcmVhZCB3aGlsZSBpbmFjdGl2ZScpO1xuICAgIH0sXG4gICAgbGlzdGVuKHNldFZhbHVlcywgY29udHJvbGxlcikge1xuICAgICAgY29uc3QgbTogTWFwPFQsIHtuZXdWYWx1ZTogVSwgcmVzb2x2ZTogRnVuY3Rpb259PiA9IG5ldyBNYXAoKTtcblxuICAgICAgY29uc3Qgc3ViID0gaW5wdXQuc3Vic2NyaWJlKHtcbiAgICAgICAgc3RhcnQoKSB7XG4gICAgICAgICAgY29uc3QgcyA9IG5ldyBTZXQoKTtcbiAgICAgICAgICBpbnB1dC52YWx1ZXMoKS5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgICAgICAgIGxldCByZXNvbHZlO1xuICAgICAgICAgICAgY29uc3QgcmVtb3ZhbDogUHJvbWlzZTx2b2lkPiA9IG5ldyBQcm9taXNlKF9yZXNvbHZlID0+IHtcbiAgICAgICAgICAgICAgcmVzb2x2ZSA9IF9yZXNvbHZlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvKjo6IGlmICghcmVzb2x2ZSkgdGhyb3cgbmV3IEVycm9yKCk7ICovXG4gICAgICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IGNiKHZhbHVlLCByZW1vdmFsKTtcbiAgICAgICAgICAgIG0uc2V0KHZhbHVlLCB7bmV3VmFsdWUsIHJlc29sdmV9KTtcbiAgICAgICAgICAgIHMuYWRkKG5ld1ZhbHVlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBzZXRWYWx1ZXMocyk7XG4gICAgICAgIH0sXG4gICAgICAgIG5leHQoY2hhbmdlcykge1xuICAgICAgICAgIGNoYW5nZXMuZm9yRWFjaChjaGFuZ2UgPT4ge1xuICAgICAgICAgICAgaWYgKGNoYW5nZS50eXBlID09PSAnYWRkJykge1xuICAgICAgICAgICAgICBsZXQgcmVzb2x2ZTtcbiAgICAgICAgICAgICAgY29uc3QgcmVtb3ZhbDogUHJvbWlzZTx2b2lkPiA9IG5ldyBQcm9taXNlKF9yZXNvbHZlID0+IHtcbiAgICAgICAgICAgICAgICByZXNvbHZlID0gX3Jlc29sdmU7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAvKjo6IGlmICghcmVzb2x2ZSkgdGhyb3cgbmV3IEVycm9yKCk7ICovXG4gICAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gY2IoY2hhbmdlLnZhbHVlLCByZW1vdmFsKTtcbiAgICAgICAgICAgICAgbS5zZXQoY2hhbmdlLnZhbHVlLCB7bmV3VmFsdWUsIHJlc29sdmV9KTtcbiAgICAgICAgICAgICAgY29udHJvbGxlci5hZGQobmV3VmFsdWUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjaGFuZ2UudHlwZSA9PT0gJ3JlbW92ZScpIHtcbiAgICAgICAgICAgICAgY29uc3QgZW50cnkgPSBtLmdldChjaGFuZ2UudmFsdWUpO1xuICAgICAgICAgICAgICBpZiAoIWVudHJ5KSB0aHJvdyBuZXcgRXJyb3IoJ3JlbW92ZWQgaXRlbSBub3QgaW4gbGl2ZXNldCcpO1xuICAgICAgICAgICAgICBjb25zdCB7bmV3VmFsdWUsIHJlc29sdmV9ID0gZW50cnk7XG4gICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgbS5kZWxldGUoY2hhbmdlLnZhbHVlKTtcbiAgICAgICAgICAgICAgY29udHJvbGxlci5yZW1vdmUobmV3VmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcihlcnIpIHtcbiAgICAgICAgICBjb250cm9sbGVyLmVycm9yKGVycik7XG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBsZXRlKCkge1xuICAgICAgICAgIGNvbnRyb2xsZXIuZW5kKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB1bnN1YnNjcmliZSgpIHtcbiAgICAgICAgICBzdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICBtLmZvckVhY2goKHtyZXNvbHZlfSkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBwdWxsQ2hhbmdlcygpIHtcbiAgICAgICAgICBzdWIucHVsbENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gb3V0cHV0O1xufVxuIl19