UNPKG

live-set

Version:

Class representing a changing and transformable collection of items.

85 lines (69 loc) 5.58 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _asap = _interopRequireDefault(require("asap")); var CAPACITY = 1024; var Scheduler = /*#__PURE__*/ function () { function Scheduler() { (0, _classCallCheck2.default)(this, Scheduler); (0, _defineProperty2.default)(this, "_queue", []); (0, _defineProperty2.default)(this, "_isFlushing", false); (0, _defineProperty2.default)(this, "_index", 0); } (0, _createClass2.default)(Scheduler, [{ key: "schedule", value: function schedule(cb) { var _this = this; this._queue.push(function () { try { cb(); } catch (e) { setTimeout(function () { throw e; }, 0); } }); if (this._queue.length === 1) { (0, _asap.default)(function () { _this.flush(); }); } } }, { key: "flush", value: function flush() { // based on https://github.com/kriskowal/asap/blob/master/raw.js if (this._isFlushing) return; this._isFlushing = true; var queue = this._queue; while (this._index < queue.length) { var currentIndex = this._index; this._index += 1; queue[currentIndex].call(); if (this._index > CAPACITY) { for (var scan = 0, newLength = queue.length - this._index; scan < newLength; scan++) { queue[scan] = queue[scan + this._index]; } queue.length -= this._index; this._index = 0; } } queue.length = 0; this._index = 0; this._isFlushing = false; } }]); return Scheduler; }(); exports.default = Scheduler; module.exports = exports.default; module.exports.default = exports.default; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9TY2hlZHVsZXIuanMiXSwibmFtZXMiOlsiQ0FQQUNJVFkiLCJTY2hlZHVsZXIiLCJjYiIsIl9xdWV1ZSIsInB1c2giLCJlIiwic2V0VGltZW91dCIsImxlbmd0aCIsImZsdXNoIiwiX2lzRmx1c2hpbmciLCJxdWV1ZSIsIl9pbmRleCIsImN1cnJlbnRJbmRleCIsImNhbGwiLCJzY2FuIiwibmV3TGVuZ3RoIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFFQTs7QUFFQSxJQUFNQSxRQUFRLEdBQUcsSUFBakI7O0lBRXFCQyxTOzs7OztrREFDTyxFO3VEQUNILEs7a0RBQ04sQzs7Ozs7NkJBRVJDLEUsRUFBYztBQUFBOztBQUNyQixXQUFLQyxNQUFMLENBQVlDLElBQVosQ0FBaUIsWUFBTTtBQUNyQixZQUFJO0FBQ0ZGLFVBQUFBLEVBQUU7QUFDSCxTQUZELENBRUUsT0FBT0csQ0FBUCxFQUFVO0FBQ1ZDLFVBQUFBLFVBQVUsQ0FBQyxZQUFNO0FBQ2Ysa0JBQU1ELENBQU47QUFDRCxXQUZTLEVBRVAsQ0FGTyxDQUFWO0FBR0Q7QUFDRixPQVJEOztBQVNBLFVBQUksS0FBS0YsTUFBTCxDQUFZSSxNQUFaLEtBQXVCLENBQTNCLEVBQThCO0FBQzVCLDJCQUFLLFlBQU07QUFDVCxVQUFBLEtBQUksQ0FBQ0MsS0FBTDtBQUNELFNBRkQ7QUFHRDtBQUNGOzs7NEJBRU87QUFDTjtBQUNBLFVBQUksS0FBS0MsV0FBVCxFQUFzQjtBQUN0QixXQUFLQSxXQUFMLEdBQW1CLElBQW5CO0FBQ0EsVUFBTUMsS0FBSyxHQUFHLEtBQUtQLE1BQW5COztBQUNBLGFBQU8sS0FBS1EsTUFBTCxHQUFjRCxLQUFLLENBQUNILE1BQTNCLEVBQW1DO0FBQ2pDLFlBQU1LLFlBQVksR0FBRyxLQUFLRCxNQUExQjtBQUNBLGFBQUtBLE1BQUwsSUFBZSxDQUFmO0FBQ0FELFFBQUFBLEtBQUssQ0FBQ0UsWUFBRCxDQUFMLENBQW9CQyxJQUFwQjs7QUFDQSxZQUFJLEtBQUtGLE1BQUwsR0FBY1gsUUFBbEIsRUFBNEI7QUFDMUIsZUFBSyxJQUFJYyxJQUFJLEdBQUcsQ0FBWCxFQUFjQyxTQUFTLEdBQUdMLEtBQUssQ0FBQ0gsTUFBTixHQUFlLEtBQUtJLE1BQW5ELEVBQTJERyxJQUFJLEdBQUdDLFNBQWxFLEVBQTZFRCxJQUFJLEVBQWpGLEVBQXFGO0FBQ25GSixZQUFBQSxLQUFLLENBQUNJLElBQUQsQ0FBTCxHQUFjSixLQUFLLENBQUNJLElBQUksR0FBRyxLQUFLSCxNQUFiLENBQW5CO0FBQ0Q7O0FBQ0RELFVBQUFBLEtBQUssQ0FBQ0gsTUFBTixJQUFnQixLQUFLSSxNQUFyQjtBQUNBLGVBQUtBLE1BQUwsR0FBYyxDQUFkO0FBQ0Q7QUFDRjs7QUFDREQsTUFBQUEsS0FBSyxDQUFDSCxNQUFOLEdBQWUsQ0FBZjtBQUNBLFdBQUtJLE1BQUwsR0FBYyxDQUFkO0FBQ0EsV0FBS0YsV0FBTCxHQUFtQixLQUFuQjtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiLyogQGZsb3cgKi9cblxuaW1wb3J0IGFzYXAgZnJvbSAnYXNhcCc7XG5cbmNvbnN0IENBUEFDSVRZID0gMTAyNDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2NoZWR1bGVyIHtcbiAgX3F1ZXVlOiBBcnJheTwoKT0+dm9pZD4gPSBbXTtcbiAgX2lzRmx1c2hpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgX2luZGV4OiBudW1iZXIgPSAwO1xuXG4gIHNjaGVkdWxlKGNiOiAoKT0+dm9pZCkge1xuICAgIHRoaXMuX3F1ZXVlLnB1c2goKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY2IoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfSwgMCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKHRoaXMuX3F1ZXVlLmxlbmd0aCA9PT0gMSkge1xuICAgICAgYXNhcCgoKSA9PiB7XG4gICAgICAgIHRoaXMuZmx1c2goKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGZsdXNoKCkge1xuICAgIC8vIGJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9rcmlza293YWwvYXNhcC9ibG9iL21hc3Rlci9yYXcuanNcbiAgICBpZiAodGhpcy5faXNGbHVzaGluZykgcmV0dXJuO1xuICAgIHRoaXMuX2lzRmx1c2hpbmcgPSB0cnVlO1xuICAgIGNvbnN0IHF1ZXVlID0gdGhpcy5fcXVldWU7XG4gICAgd2hpbGUgKHRoaXMuX2luZGV4IDwgcXVldWUubGVuZ3RoKSB7XG4gICAgICBjb25zdCBjdXJyZW50SW5kZXggPSB0aGlzLl9pbmRleDtcbiAgICAgIHRoaXMuX2luZGV4ICs9IDE7XG4gICAgICBxdWV1ZVtjdXJyZW50SW5kZXhdLmNhbGwoKTtcbiAgICAgIGlmICh0aGlzLl9pbmRleCA+IENBUEFDSVRZKSB7XG4gICAgICAgIGZvciAobGV0IHNjYW4gPSAwLCBuZXdMZW5ndGggPSBxdWV1ZS5sZW5ndGggLSB0aGlzLl9pbmRleDsgc2NhbiA8IG5ld0xlbmd0aDsgc2NhbisrKSB7XG4gICAgICAgICAgcXVldWVbc2Nhbl0gPSBxdWV1ZVtzY2FuICsgdGhpcy5faW5kZXhdO1xuICAgICAgICB9XG4gICAgICAgIHF1ZXVlLmxlbmd0aCAtPSB0aGlzLl9pbmRleDtcbiAgICAgICAgdGhpcy5faW5kZXggPSAwO1xuICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5sZW5ndGggPSAwO1xuICAgIHRoaXMuX2luZGV4ID0gMDtcbiAgICB0aGlzLl9pc0ZsdXNoaW5nID0gZmFsc2U7XG4gIH1cbn1cbiJdfQ==