live-set
Version:
Class representing a changing and transformable collection of items.
73 lines (65 loc) • 7.02 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = filter;
var _ = _interopRequireDefault(require("."));
/* eslint-disable no-unused-vars, no-redeclare */
/*:: export default filter; */
/*:: ` */
function filter(liveSet, cb) {
return new _.default({
scheduler: liveSet.getScheduler(),
read: function read() {
var ret = new Set();
liveSet.values().forEach(function (value) {
if (cb(value)) {
ret.add(value);
}
});
return ret;
},
listen: function listen(setValues, controller) {
var passedFilter = new Set();
var sub = liveSet.subscribe({
start: function start() {
var initialValues = new Set();
liveSet.values().forEach(function (value) {
if (cb(value)) {
passedFilter.add(value);
initialValues.add(value);
}
});
setValues(initialValues);
},
next: function next(changes) {
changes.forEach(function (change) {
if (change.type === 'add') {
if (cb(change.value)) {
passedFilter.add(change.value);
controller.add(change.value);
}
} else if (change.type === 'remove') {
if (passedFilter.has(change.value)) {
passedFilter.delete(change.value);
controller.remove(change.value);
}
}
});
},
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9maWx0ZXIuanMiXSwibmFtZXMiOlsiZmlsdGVyIiwibGl2ZVNldCIsImNiIiwiTGl2ZVNldCIsInNjaGVkdWxlciIsImdldFNjaGVkdWxlciIsInJlYWQiLCJyZXQiLCJTZXQiLCJ2YWx1ZXMiLCJmb3JFYWNoIiwidmFsdWUiLCJhZGQiLCJsaXN0ZW4iLCJzZXRWYWx1ZXMiLCJjb250cm9sbGVyIiwicGFzc2VkRmlsdGVyIiwic3ViIiwic3Vic2NyaWJlIiwic3RhcnQiLCJpbml0aWFsVmFsdWVzIiwibmV4dCIsImNoYW5nZXMiLCJjaGFuZ2UiLCJ0eXBlIiwiaGFzIiwiZGVsZXRlIiwicmVtb3ZlIiwiZXJyb3IiLCJlcnIiLCJjb21wbGV0ZSIsImVuZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBR0E7O0FBRkE7O0FBT0E7O0FBRUE7QUFDZSxTQUFTQSxNQUFULENBQW1CQyxPQUFuQixFQUF3Q0MsRUFBeEMsRUFBMkU7QUFDeEYsU0FBTyxJQUFJQyxTQUFKLENBQVk7QUFDakJDLElBQUFBLFNBQVMsRUFBRUgsT0FBTyxDQUFDSSxZQUFSLEVBRE07QUFFakJDLElBQUFBLElBRmlCLGtCQUVWO0FBQ0wsVUFBTUMsR0FBRyxHQUFHLElBQUlDLEdBQUosRUFBWjtBQUNBUCxNQUFBQSxPQUFPLENBQUNRLE1BQVIsR0FBaUJDLE9BQWpCLENBQXlCLFVBQUFDLEtBQUssRUFBSTtBQUNoQyxZQUFJVCxFQUFFLENBQUNTLEtBQUQsQ0FBTixFQUFlO0FBQ2JKLFVBQUFBLEdBQUcsQ0FBQ0ssR0FBSixDQUFRRCxLQUFSO0FBQ0Q7QUFDRixPQUpEO0FBS0EsYUFBT0osR0FBUDtBQUNELEtBVmdCO0FBV2pCTSxJQUFBQSxNQVhpQixrQkFXVkMsU0FYVSxFQVdDQyxVQVhELEVBV2E7QUFDNUIsVUFBTUMsWUFBWSxHQUFHLElBQUlSLEdBQUosRUFBckI7QUFFQSxVQUFNUyxHQUFHLEdBQUdoQixPQUFPLENBQUNpQixTQUFSLENBQWtCO0FBQzVCQyxRQUFBQSxLQUQ0QixtQkFDcEI7QUFDTixjQUFNQyxhQUFhLEdBQUcsSUFBSVosR0FBSixFQUF0QjtBQUNBUCxVQUFBQSxPQUFPLENBQUNRLE1BQVIsR0FBaUJDLE9BQWpCLENBQXlCLFVBQUFDLEtBQUssRUFBSTtBQUNoQyxnQkFBSVQsRUFBRSxDQUFDUyxLQUFELENBQU4sRUFBZTtBQUNiSyxjQUFBQSxZQUFZLENBQUNKLEdBQWIsQ0FBaUJELEtBQWpCO0FBQ0FTLGNBQUFBLGFBQWEsQ0FBQ1IsR0FBZCxDQUFrQkQsS0FBbEI7QUFDRDtBQUNGLFdBTEQ7QUFNQUcsVUFBQUEsU0FBUyxDQUFDTSxhQUFELENBQVQ7QUFDRCxTQVYyQjtBQVc1QkMsUUFBQUEsSUFYNEIsZ0JBV3ZCQyxPQVh1QixFQVdkO0FBQ1pBLFVBQUFBLE9BQU8sQ0FBQ1osT0FBUixDQUFnQixVQUFBYSxNQUFNLEVBQUk7QUFDeEIsZ0JBQUlBLE1BQU0sQ0FBQ0MsSUFBUCxLQUFnQixLQUFwQixFQUEyQjtBQUN6QixrQkFBSXRCLEVBQUUsQ0FBQ3FCLE1BQU0sQ0FBQ1osS0FBUixDQUFOLEVBQXNCO0FBQ3BCSyxnQkFBQUEsWUFBWSxDQUFDSixHQUFiLENBQWlCVyxNQUFNLENBQUNaLEtBQXhCO0FBQ0FJLGdCQUFBQSxVQUFVLENBQUNILEdBQVgsQ0FBZVcsTUFBTSxDQUFDWixLQUF0QjtBQUNEO0FBQ0YsYUFMRCxNQUtPLElBQUlZLE1BQU0sQ0FBQ0MsSUFBUCxLQUFnQixRQUFwQixFQUE4QjtBQUNuQyxrQkFBSVIsWUFBWSxDQUFDUyxHQUFiLENBQWlCRixNQUFNLENBQUNaLEtBQXhCLENBQUosRUFBb0M7QUFDbENLLGdCQUFBQSxZQUFZLENBQUNVLE1BQWIsQ0FBb0JILE1BQU0sQ0FBQ1osS0FBM0I7QUFDQUksZ0JBQUFBLFVBQVUsQ0FBQ1ksTUFBWCxDQUFrQkosTUFBTSxDQUFDWixLQUF6QjtBQUNEO0FBQ0Y7QUFDRixXQVpEO0FBYUQsU0F6QjJCO0FBMEI1QmlCLFFBQUFBLEtBMUI0QixpQkEwQnRCQyxHQTFCc0IsRUEwQmpCO0FBQ1RkLFVBQUFBLFVBQVUsQ0FBQ2EsS0FBWCxDQUFpQkMsR0FBakI7QUFDRCxTQTVCMkI7QUE2QjVCQyxRQUFBQSxRQTdCNEIsc0JBNkJqQjtBQUNUZixVQUFBQSxVQUFVLENBQUNnQixHQUFYO0FBQ0Q7QUEvQjJCLE9BQWxCLENBQVo7QUFrQ0EsYUFBT2QsR0FBUDtBQUNEO0FBakRnQixHQUFaLENBQVA7QUFtREQ7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbIi8qIEBmbG93ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycywgbm8tcmVkZWNsYXJlICovXG5cbmltcG9ydCBMaXZlU2V0IGZyb20gJy4nO1xuXG5kZWNsYXJlIGZ1bmN0aW9uIGZpbHRlcjxUPihsaXZlU2V0OiBMaXZlU2V0PFQ+LCBjYjogdHlwZW9mIEJvb2xlYW4pOiBMaXZlU2V0PCROb25NYXliZVR5cGU8VD4+O1xuZGVjbGFyZSBmdW5jdGlvbiBmaWx0ZXI8VD4obGl2ZVNldDogTGl2ZVNldDxUPiwgY2I6ICh2YWx1ZTogVCkgPT4gYW55KTogTGl2ZVNldDxUPjtcblxuLyo6OiBleHBvcnQgZGVmYXVsdCBmaWx0ZXI7ICovXG5cbi8qOjogYCAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZmlsdGVyPFQ+KGxpdmVTZXQ6IExpdmVTZXQ8VD4sIGNiOiAodmFsdWU6IFQpID0+IGFueSk6IExpdmVTZXQ8VD4ge1xuICByZXR1cm4gbmV3IExpdmVTZXQoe1xuICAgIHNjaGVkdWxlcjogbGl2ZVNldC5nZXRTY2hlZHVsZXIoKSxcbiAgICByZWFkKCkge1xuICAgICAgY29uc3QgcmV0ID0gbmV3IFNldCgpO1xuICAgICAgbGl2ZVNldC52YWx1ZXMoKS5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgICAgaWYgKGNiKHZhbHVlKSkge1xuICAgICAgICAgIHJldC5hZGQodmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfSxcbiAgICBsaXN0ZW4oc2V0VmFsdWVzLCBjb250cm9sbGVyKSB7XG4gICAgICBjb25zdCBwYXNzZWRGaWx0ZXIgPSBuZXcgU2V0KCk7XG5cbiAgICAgIGNvbnN0IHN1YiA9IGxpdmVTZXQuc3Vic2NyaWJlKHtcbiAgICAgICAgc3RhcnQoKSB7XG4gICAgICAgICAgY29uc3QgaW5pdGlhbFZhbHVlcyA9IG5ldyBTZXQoKTtcbiAgICAgICAgICBsaXZlU2V0LnZhbHVlcygpLmZvckVhY2godmFsdWUgPT4ge1xuICAgICAgICAgICAgaWYgKGNiKHZhbHVlKSkge1xuICAgICAgICAgICAgICBwYXNzZWRGaWx0ZXIuYWRkKHZhbHVlKTtcbiAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlcy5hZGQodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHNldFZhbHVlcyhpbml0aWFsVmFsdWVzKTtcbiAgICAgICAgfSxcbiAgICAgICAgbmV4dChjaGFuZ2VzKSB7XG4gICAgICAgICAgY2hhbmdlcy5mb3JFYWNoKGNoYW5nZSA9PiB7XG4gICAgICAgICAgICBpZiAoY2hhbmdlLnR5cGUgPT09ICdhZGQnKSB7XG4gICAgICAgICAgICAgIGlmIChjYihjaGFuZ2UudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcGFzc2VkRmlsdGVyLmFkZChjaGFuZ2UudmFsdWUpO1xuICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuYWRkKGNoYW5nZS52YWx1ZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hhbmdlLnR5cGUgPT09ICdyZW1vdmUnKSB7XG4gICAgICAgICAgICAgIGlmIChwYXNzZWRGaWx0ZXIuaGFzKGNoYW5nZS52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBwYXNzZWRGaWx0ZXIuZGVsZXRlKGNoYW5nZS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgY29udHJvbGxlci5yZW1vdmUoY2hhbmdlLnZhbHVlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcihlcnIpIHtcbiAgICAgICAgICBjb250cm9sbGVyLmVycm9yKGVycik7XG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBsZXRlKCkge1xuICAgICAgICAgIGNvbnRyb2xsZXIuZW5kKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gc3ViO1xuICAgIH1cbiAgfSk7XG59XG4vKjo6IGAgKi9cbiJdfQ==