UNPKG

@pivanov/utils

Version:

A focused collection of TypeScript utilities for modern web development

9 lines (8 loc) 1.18 kB
/*! * @pivanov/utils v1.0.0 * (c) 2024-present Pavel Ivanov * Released under the MIT License. * https://github.com/pivanov/utils */ var N=(z,q)=>{return new Promise((G,B)=>{if(q?.aborted){B(q.reason);return}let C=setTimeout(()=>{q?.removeEventListener("abort",F),G()},z),F=()=>{clearTimeout(C),B(q?.reason)};q?.addEventListener("abort",F,{once:!0})})},O=(z,q,G)=>{return new Promise((B,C)=>{let F=setTimeout(()=>{C(G??Error(`Operation timed out after ${q}ms`))},q);z.then((H)=>{clearTimeout(F),B(H)},(H)=>{clearTimeout(F),C(H)})})},P=async(z,q={})=>{let{attempts:G=3,backoff:B=0,signal:C,shouldRetry:F}=q,H;for(let D=1;D<=G;D++){if(C?.aborted)throw C.reason;try{return await z(D)}catch(J){if(H=J,D>=G)break;if(F&&!F(J,D))break;let K=typeof B==="function"?B(D):B;if(K>0)await N(K,C)}}throw H},Q=()=>{let z,q;return{promise:new Promise((B,C)=>{z=B,q=C}),resolve:z,reject:q}},S=async(z,q,G)=>{if(q<1)throw Error("parallelLimit: concurrency must be >= 1");let B=Array(z.length),C=0,F=async()=>{while(!0){let D=C++;if(D>=z.length)return;B[D]=await G(z[D],D)}},H=Array.from({length:Math.min(q,z.length)},F);return await Promise.all(H),B}; export{N as H,O as I,P as J,Q as K,S as L};