plotly-icons
Version:
set of plotly icons
136 lines (111 loc) • 3.1 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _promise = require('babel-runtime/core-js/promise');
var _promise2 = _interopRequireDefault(_promise);
var _assign = require('babel-runtime/core-js/object/assign');
var _assign2 = _interopRequireDefault(_assign);
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _createClass2 = require('babel-runtime/helpers/createClass');
var _createClass3 = _interopRequireDefault(_createClass2);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
// based on https://github.com/sindresorhus/p-queue (MIT)
// modified for browser support
var Queue = function () {
function Queue() {
(0, _classCallCheck3.default)(this, Queue);
this._queue = [];
}
(0, _createClass3.default)(Queue, [{
key: 'enqueue',
value: function enqueue(run) {
this._queue.push(run);
}
}, {
key: 'dequeue',
value: function dequeue() {
return this._queue.shift();
}
}, {
key: 'size',
get: function get() {
return this._queue.length;
}
}]);
return Queue;
}();
var PQueue = function () {
function PQueue(opts) {
(0, _classCallCheck3.default)(this, PQueue);
opts = (0, _assign2.default)({
concurrency: Infinity,
queueClass: Queue
}, opts);
if (opts.concurrency < 1) {
throw new TypeError('Expected `concurrency` to be a number from 1 and up');
}
this.queue = new opts.queueClass(); // eslint-disable-line new-cap
this._pendingCount = 0;
this._concurrency = opts.concurrency;
this._resolveEmpty = function () {};
}
(0, _createClass3.default)(PQueue, [{
key: '_next',
value: function _next() {
this._pendingCount--;
if (this.queue.size > 0) {
this.queue.dequeue()();
} else {
this._resolveEmpty();
}
}
}, {
key: 'add',
value: function add(fn, opts) {
var _this = this;
return new _promise2.default(function (resolve, reject) {
var run = function run() {
_this._pendingCount++;
fn().then(function (val) {
resolve(val);
_this._next();
}, function (err) {
reject(err);
_this._next();
});
};
if (_this._pendingCount < _this._concurrency) {
run();
} else {
_this.queue.enqueue(run, opts);
}
});
}
}, {
key: 'onEmpty',
value: function onEmpty() {
var _this2 = this;
return new _promise2.default(function (resolve) {
var existingResolve = _this2._resolveEmpty;
_this2._resolveEmpty = function () {
existingResolve();
resolve();
};
});
}
}, {
key: 'size',
get: function get() {
return this.queue.size;
}
}, {
key: 'pending',
get: function get() {
return this._pendingCount;
}
}]);
return PQueue;
}();
exports.default = PQueue;