@lzptec/concurrency
Version:
A Lightweight concurrency manager
2 lines • 999 B
JavaScript
import {d as d$1,h,e,c,f,g}from'./chunk-6CP24U3Z.js';var o,t,i,u,m,y,d=class{constructor(e$1){d$1(this,m);d$1(this,o,new h);d$1(this,t,0);d$1(this,i,1);d$1(this,u,Promise.resolve());var s;e(this,i,(s=e$1==null?void 0:e$1.maxConcurrency)!=null?s:1);}async run(e,...s){let{release:a}=await this.acquire();try{return await e(s)}finally{a();}}async acquire(){let e,s=new Promise(a=>{e=a;});return new Promise(a=>{c(this,o).enqueue({promise:s,release:()=>a({release:e})}),f(this,m,y).call(this);})}get acquired(){return c(this,t)}get options(){return {maxConcurrency:c(this,i)}}set options(e$1){e(this,i,e$1.maxConcurrency);}};o=new WeakMap,t=new WeakMap,i=new WeakMap,u=new WeakMap,m=new WeakSet,y=function(){if(!c(this,o).length||c(this,t)>=c(this,i))return;let{release:e,promise:s}=c(this,o).dequeue();g(this,t)._++,c(this,u).then(e).then(()=>s).finally(()=>{g(this,t)._--,f(this,m,y).call(this);});};export{d as a};//# sourceMappingURL=chunk-54DYTVMB.js.map
//# sourceMappingURL=chunk-54DYTVMB.js.map