astx
Version:
super powerful structural search and replace for JavaScript and TypeScript to automate your refactoring
36 lines (29 loc) • 3.12 kB
JavaScript
export default class AsyncPool {
entries = []
callbacks = []
constructor(entries) {
this.entries = entries.map((elem) => ({
elem,
available: true,
}))
}
get elements() {
return this.entries.map((e) => e.elem)
}
async run(executor) {
const entry =
this.entries.find((e) => e.available) ||
(await new Promise((resolve) => this.callbacks.push(resolve)))
try {
entry.available = false
return await executor(entry.elem)
} finally {
var _this$callbacks$shift
entry.available = true
;(_this$callbacks$shift = this.callbacks.shift()) === null ||
_this$callbacks$shift === void 0
? void 0
: _this$callbacks$shift(entry)
}
}
} //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBc3luY1Bvb2wiLCJlbnRyaWVzIiwiY2FsbGJhY2tzIiwiY29uc3RydWN0b3IiLCJtYXAiLCJlbGVtIiwiYXZhaWxhYmxlIiwiZWxlbWVudHMiLCJlIiwicnVuIiwiZXhlY3V0b3IiLCJlbnRyeSIsImZpbmQiLCJQcm9taXNlIiwicmVzb2x2ZSIsInB1c2giLCJzaGlmdCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ub2RlL0FzeW5jUG9vbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJ0eXBlIEVudHJ5PEU+ID0geyBlbGVtOiBFOyBhdmFpbGFibGU6IGJvb2xlYW4gfVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBc3luY1Bvb2w8RT4ge1xuICBlbnRyaWVzOiBFbnRyeTxFPltdID0gW11cbiAgY2FsbGJhY2tzOiAoKGVudHJ5OiBFbnRyeTxFPikgPT4gdm9pZClbXSA9IFtdXG5cbiAgY29uc3RydWN0b3IoZW50cmllczogRVtdKSB7XG4gICAgdGhpcy5lbnRyaWVzID0gZW50cmllcy5tYXAoKGVsZW0pID0+ICh7IGVsZW0sIGF2YWlsYWJsZTogdHJ1ZSB9KSlcbiAgfVxuXG4gIGdldCBlbGVtZW50cygpOiBFW10ge1xuICAgIHJldHVybiB0aGlzLmVudHJpZXMubWFwKChlKSA9PiBlLmVsZW0pXG4gIH1cblxuICBhc3luYyBydW48VD4oZXhlY3V0b3I6IChlbGVtOiBFKSA9PiBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiB7XG4gICAgY29uc3QgZW50cnkgPVxuICAgICAgdGhpcy5lbnRyaWVzLmZpbmQoKGUpID0+IGUuYXZhaWxhYmxlKSB8fFxuICAgICAgKGF3YWl0IG5ldyBQcm9taXNlPEVudHJ5PEU+PigocmVzb2x2ZSkgPT4gdGhpcy5jYWxsYmFja3MucHVzaChyZXNvbHZlKSkpXG4gICAgdHJ5IHtcbiAgICAgIGVudHJ5LmF2YWlsYWJsZSA9IGZhbHNlXG4gICAgICByZXR1cm4gYXdhaXQgZXhlY3V0b3IoZW50cnkuZWxlbSlcbiAgICB9IGZpbmFsbHkge1xuICAgICAgZW50cnkuYXZhaWxhYmxlID0gdHJ1ZVxuICAgICAgdGhpcy5jYWxsYmFja3Muc2hpZnQoKT8uKGVudHJ5KVxuICAgIH1cbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOztBQUVBLGVBQWUsTUFBTUEsU0FBTixDQUFtQjtFQUNoQ0MsT0FBTyxHQUFlLEVBQWY7RUFDUEMsU0FBUyxHQUFrQyxFQUFsQzs7RUFFVEMsV0FBVyxDQUFDRixPQUFELEVBQWU7SUFDeEIsS0FBS0EsT0FBTCxHQUFlQSxPQUFPLENBQUNHLEdBQVIsQ0FBWSxDQUFDQyxJQUFELE1BQVcsRUFBRUEsSUFBRixFQUFRQyxTQUFTLEVBQUUsSUFBbkIsRUFBWCxDQUFaLENBQWY7RUFDRDs7RUFFVyxJQUFSQyxRQUFRLEdBQVE7SUFDbEIsT0FBTyxLQUFLTixPQUFMLENBQWFHLEdBQWIsQ0FBaUIsQ0FBQ0ksQ0FBRCxLQUFPQSxDQUFDLENBQUNILElBQTFCLENBQVA7RUFDRDs7RUFFUSxNQUFISSxHQUFHLENBQUlDLFFBQUosRUFBbUQ7SUFDMUQsTUFBTUMsS0FBSztJQUNULEtBQUtWLE9BQUwsQ0FBYVcsSUFBYixDQUFrQixDQUFDSixDQUFELEtBQU9BLENBQUMsQ0FBQ0YsU0FBM0I7SUFDQyxNQUFNLElBQUlPLE9BQUosQ0FBc0IsQ0FBQ0MsT0FBRCxLQUFhLEtBQUtaLFNBQUwsQ0FBZWEsSUFBZixDQUFvQkQsT0FBcEIsQ0FBbkMsQ0FEUCxDQURGO0lBR0EsSUFBSTtNQUNGSCxLQUFLLENBQUNMLFNBQU4sR0FBa0IsS0FBbEI7TUFDQSxPQUFPLE1BQU1JLFFBQVEsQ0FBQ0MsS0FBSyxDQUFDTixJQUFQLENBQXJCO0lBQ0QsQ0FIRCxTQUdVO01BQ1JNLEtBQUssQ0FBQ0wsU0FBTixHQUFrQixJQUFsQjtNQUNBLDhCQUFLSixTQUFMLENBQWVjLEtBQWYsa0ZBQXlCTCxLQUF6QjtJQUNEO0VBQ0YsQ0F2QitCIn0=