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