UNPKG

@jacoblincool/puddle

Version:

Pooling? Maybe.

2 lines (1 loc) 1.92 kB
var a=Object.create;var n=Object.defineProperty;var v=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var m=Object.getPrototypeOf,c=Object.prototype.hasOwnProperty;var o=e=>n(e,"__esModule",{value:!0});var b=(e,s)=>{for(var t in s)n(e,t,{get:s[t],enumerable:!0})},l=(e,s,t,r)=>{if(s&&typeof s=="object"||typeof s=="function")for(let i of p(s))!c.call(e,i)&&(t||i!=="default")&&n(e,i,{get:()=>s[i],enumerable:!(r=v(s,i))||r.enumerable});return e},k=(e,s)=>l(o(n(e!=null?a(m(e)):{},"default",!s&&e&&e.__esModule?{get:()=>e.default,enumerable:!0}:{value:e,enumerable:!0})),e),w=(e=>(s,t)=>e&&e.get(s)||(t=l(o({}),s,1),e&&e.set(s,t),t))(typeof WeakMap!="undefined"?new WeakMap:0);var d={};b(d,{Pool:()=>u,default:()=>f});var h=k(require("events")),u=class extends h.default{constructor(s=1){super();this.size=s,this.available=s,this.tasks=[],this.queue=[],this.resolves=[],this.results=[]}on(s,t){return super.on(s,t),this}once(s,t){return super.once(s,t),this}removeListener(s,t){return super.removeListener(s,t),this}removeAllListeners(s){return super.removeAllListeners(s),this}emit(s,...t){return super.emit(s,...t)}push(s){this.tasks.push(async()=>s())}async go(){this.emit("pool-start"),this.available=this.size,this.queue=[],this.resolves=[],this.results=[];for(let s=0;s<this.tasks.length;s++)await this.isAvailable(),this.queue.push((async()=>{var t,r;this.emit("task-start",s);try{let i=await this.tasks[s]();this.results[s]=i,this.resolves.length>0&&((t=this.resolves.shift())==null||t(!0)),this.emit("task-finish",s,i)}catch(i){this.resolves.length>0&&((r=this.resolves.shift())==null||r(!0)),this.emit("task-error",s,i)}})());return await Promise.all(this.queue),this.queue=[],this.emit("pool-end"),this.results}run(){return this.go()}isAvailable(){return new Promise(s=>{this.available>0?(this.available--,s(!0)):this.resolves.push(s)})}},f=u;module.exports=w(d);0&&(module.exports={Pool});