@lzptec/concurrency
Version:
A Lightweight concurrency manager
2 lines • 3.24 kB
JavaScript
import {n,l,c,d as d$1,e,m as m$1,f as f$2,g as g$1,h,i,j,b as b$1,k as k$1,a as a$3}from'./chunk-F6AHWZHA.js';import {a as a$1}from'./chunk-54DYTVMB.js';import {d,f as f$1,b,a as a$2,c as c$1,e as e$1}from'./chunk-6CP24U3Z.js';function W(b){if(!Number.isInteger(b.maxConcurrency))throw new Error("Parameter `maxConcurrency` must be a integer!");if(!Number.isInteger(b.interval)||b.interval<0)throw new Error("Parameter `interval` must be a positive integer greater than 0!")}var u,y,g,w,k,f,a,m,x,X,C=class extends n{constructor(t){super();d(this,x);d(this,u);d(this,y,new a$1);d(this,g,Promise.resolve());d(this,w,[]);d(this,k,0);d(this,f);this.options=t;}static async forEach(t){l(t.task);let{task:e}=c(t.task);await f$1(this,a,m).call(this,b(a$2({},t),{task:e}));}static async map(t){l(t.task);let{task:e,results:r}=d$1(t.task);return await f$1(this,a,m).call(this,b(a$2({},t),{task:e})),r}static async mapSettled(t){l(t.task);let{task:e$1,results:r}=e(t.task);return await f$1(this,a,m).call(this,b(a$2({},t),{task:e$1})),r}static async filter(t){m$1(t.predicate);let{task:e,results:r}=f$2(t.predicate);return await f$1(this,a,m).call(this,b(a$2({},t),{task:e})),r}static async some(t){m$1(t.predicate);let{task:e,results:r}=g$1(t.predicate);return await f$1(this,a,m).call(this,b(a$2({},t),{task:e})),r[0]}static async find(t){m$1(t.predicate);let{task:e,results:r}=h(t.predicate);return await f$1(this,a,m).call(this,b(a$2({},t),{task:e})),r[0]}static async every(t){m$1(t.predicate);let{task:e,results:r}=i(t.predicate);return await f$1(this,a,m).call(this,b(a$2({},t),{task:e})),r[0]}static async group(t){l(t.task);let{task:e,results:r}=j(t.task);return await f$1(this,a,m).call(this,b(a$2({},t),{task:e})),Object.fromEntries(r[0])}async run(t,...e){let{interval:r}=c$1(this,u),l=await c$1(this,y).acquire();c$1(this,w).push(l);let n=performance.now();return n-c$1(this,k)>=r&&e$1(this,k,n),c$1(this,f)||e$1(this,f,setTimeout(f$1(this,x,X).bind(this),r)),c$1(this,g).then(()=>t(...e))}async[b$1](t,e){let r=k$1(t),l=false,{maxConcurrency:n}=c$1(this,u),B=d=>{throw l=true,d};await new Promise((d,E)=>{let A=n;for(let S=0;S<n;S++)Promise.resolve(r.next()).then(async T=>{for(;!l&&!T.done;)await this.run(e,await T.value),T=await r.next();}).then(()=>--A===0?d():void 0).catch(B).catch(E);});}set options(t){W(t),e$1(this,u,a$2(a$2({},c$1(this,u)),t)),c$1(this,y).options=c$1(this,u);}get options(){return a$2({},c$1(this,u))}};u=new WeakMap,y=new WeakMap,g=new WeakMap,w=new WeakMap,k=new WeakMap,f=new WeakMap,a=new WeakSet,m=async function(t){W(t);let e=k$1(t.input),r=false,l=A=>{throw r=true,A},n=performance.now(),{interval:B,maxConcurrency:d,task:E}=t;await new Promise((A,S)=>{let T=d;for(let L=0;L<d;L++)(async()=>{var N;for(;!r;){let R=await e.next();if(R.done||r)break;if(await E(await R.value)===a$3){r=true,(N=e.return)==null||N.call(e);break}let I=performance.now();I-n>=B&&(n=I);let G=n+B-I;G>1&&await new Promise(Y=>setTimeout(()=>Y(),G));}})().then(()=>--T===0?A():void 0).catch(l).catch(S);});},x=new WeakSet,X=function(){c$1(this,w).forEach(t=>t.release()),e$1(this,w,[]),e$1(this,f,void 0);},d(C,a);Object.freeze(C);export{C as a};//# sourceMappingURL=chunk-VN6IUMJC.js.map
//# sourceMappingURL=chunk-VN6IUMJC.js.map