"use strict"; var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault"); var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property"); _Object$defineProperty(exports, "__esModule", { value: true }); exports.Pool = void 0; var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise")); var Pool = /** @class */ function () { function Pool(runTask, limit) { this.runTask = runTask; this.limit = limit; this.aborted = false; this.queue = []; this.processing = []; } Pool.prototype.enqueue = function (task) { var _this = this; return new _promise["default"](function (resolve, reject) { _this.queue.push({ task: task, resolve: resolve, reject: reject }); _this.check(); }); }; Pool.prototype.run = function (item) { var _this = this; this.queue = this.queue.filter(function (v) { return v !== item; }); this.processing.push(item); this.runTask(item.task).then(function () { _this.processing = _this.processing.filter(function (v) { return v !== item; }); item.resolve(); _this.check(); }, function (err) { return item.reject(err); }); }; Pool.prototype.check = function () { var _this = this; if (this.aborted) return; var processingNum = this.processing.length; var availableNum = this.limit - processingNum; this.queue.slice(0, availableNum).forEach(function (item) { _this.run(item); }); }; Pool.prototype.abort = function () { this.queue = []; this.aborted = true; }; return Pool; }(); exports.Pool = Pool;